记录编号 334641 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010]乌龟棋 最终得分 100
用户昵称 GravatarMealy 是否通过 通过
代码语言 C++ 运行时间 0.151 s
提交时间 2016-11-01 13:18:36 内存使用 9.98 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>


using namespace std;


const int nmax=41;
const int lmax=386;


int n,m;
int tmp;
int val[lmax]={0};


int card[5]={0};


int f[nmax][nmax][nmax][nmax]={0};


void PreDo()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&val[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&tmp);
		card[tmp]++;
	}
}


void DP()
{
	for(int i=0;i<=card[1];i++)
	{
		for(int j=0;j<=card[2];j++)
		{
			for(int k=0;k<=card[3];k++)
			{
				for(int l=0;l<=card[4];l++)
				{
					if(i!=0)
					{
						f[i][j][k][l]=max(f[i][j][k][l],f[i-1][j][k][l]);
					}
					if(j!=0)
					{
						f[i][j][k][l]=max(f[i][j][k][l],f[i][j-1][k][l]);
					}
					if(k!=0)
					{
						f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k-1][l]);
					}
					if(l!=0)
					{
						f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k][l-1]);
					}
					f[i][j][k][l]+=val[i*1+j*2+k*3+l*4];
				}
			}
		}
	}
	printf("%d\n",f[card[1]][card[2]][card[3]][card[4]]);
}


int main()
{
	freopen("tortoise.in","r",stdin);
	freopen("tortoise.out","w",stdout);
	PreDo();
	DP();
	return 0;
}