比赛 防止颓废的小练习v0.2 评测结果 AAAAAAAAAA
题目名称 乌龟棋 最终得分 100
用户昵称 SOBER GOOD BOY 运行时间 0.052 s
代码语言 C++ 内存使用 12.18 MiB
提交时间 2016-10-18 12:11:52
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn=42;

int  q[5];

int N,M;

int A[maxn*10];

int f[maxn][maxn][maxn][maxn];

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]);
 	int tot=0;
 	for(int x,i=1;i<=M;i++)
	 {
		scanf("%d",&x);
		tot+=x;
		q[x]++;
	 }
	// memset(f,-1,sizeof(f));
	 f[0][0][0][0]=A[1];
	 for(int a1=0;a1<=q[1];a1++)
	 for(int a2=0;a2<=q[2];a2++)
	 for(int a3=0;a3<=q[3];a3++)
	 for(int a4=0;a4<=q[4];a4++)
	 {
	  		 int &ha=f[a1][a2][a3][a4];
	  		 if(!a1&&!a2&&!a3&&!a4)continue;
	  		 //ha=A[1];
	  		 if(a1>0)
	  		 {
			  ha=max(ha,f[a1-1][a2][a3][a4]+A[1+a1*1+a2*2+a3*3+a4*4]);								  
             }
             if(a2>0)
	  		 {
			  ha=max(ha,f[a1][a2-1][a3][a4]+A[1+a1*1+a2*2+a3*3+a4*4]);								  
             }
             if(a3>0)
	  		 {
			  ha=max(ha,f[a1][a2][a3-1][a4]+A[1+a1*1+a2*2+a3*3+a4*4]);								  
             }
             if(a4>0)
	  		 {
			  ha=max(ha,f[a1][a2][a3][a4-1]+A[1+a1*1+a2*2+a3*3+a4*4]);								  
             }
            // ha=max(ha,A[1]);
	 } 
	 printf("%d",f[q[1]][q[2]][q[3]][q[4]]);
	 //while(1);
 	fclose(stdin);
 	fclose(stdout);
 	return 0;
}