记录编号 410905 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010]乌龟棋 最终得分 100
用户昵称 Gravatarliuyu 是否通过 通过
代码语言 C++ 运行时间 0.064 s
提交时间 2017-06-02 21:36:19 内存使用 10.08 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[353],b,shu[5],win[40][40][40][40],Max=0,Min=0;
int main()
{
	freopen("tortoise.in","r",stdin);
	freopen("tortoise.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	  {
	  	scanf("%d",&a[i]);
	  }
	for(int i=1;i<=m;i++)
	 {
	 	scanf("%d",&b);
	 	shu[b]++;
	 }
//	win[0][0][0][0]=a[1];
//	win[]
//	win[1][1][1][1]
	for(int i=0;i<=shu[4];i++)
	  for(int j=0;j<=shu[3];j++)
	    for(int x=0;x<=shu[2];x++)
	      for(int y=0;y<=shu[1];y++)
	      {
	      	int o=y+x*2+j*3+i*4;
	      	if(i)win[i][j][x][y]=max(win[i][j][x][y],win[i-1][j][x][y]);
	      	if(j)win[i][j][x][y]=max(win[i][j][x][y],win[i][j-1][x][y]);
	      	if(x)win[i][j][x][y]=max(win[i][j][x-1][y],win[i][j][x][y]);
	      	if(y)win[i][j][x][y]=max(win[i][j][x][y],win[i][j][x][y-1]);
	      	win[i][j][x][y]+=a[o+1];
	         //win[i+1][j+1][x+1][y+1]=max(max(max(win[i][j+1][x+1][y+1]+a[o],win[i+1][j][x+1][y+1]+a[o]),max(win[i+1][j+1][x][y+1]+a[o],win[i+1][j+1][x+1][y]+a[o])),win[i+1][j+1][x+1][y+1] );
	         Max=max(Max,win[i][j][x][y]);//printf("%d    ",Max-Min);Min=Max;
	     }
	printf("%d",Max);
	return 0;
}