比赛 练习赛 评测结果 AAAAAAAAAA
题目名称 乌龟棋 最终得分 100
用户昵称 subaru 运行时间 0.261 s
代码语言 C++ 内存使用 29.31 MiB
提交时间 2019-05-22 15:28:58
显示代码纯文本
#include <cstdio>
#include <iostream>

#define N 400
#define E 45

using namespace std;

inline int read(){
	int op=1,aa=0;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')op=-1;c=getchar();}
	while(c>='0'&&c<='9'){aa=aa*10+c-'0';c=getchar();}
	return op*aa;
}

int n,m;
int num[N];
int cnt[5];
int dp[E][E][E][E];

int main(){
	freopen("tortoise.in","r",stdin);
	freopen("tortoise.out","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=n;i++)num[i]=read();
	for(int i=1;i<=m;i++){
		int t=read();
		cnt[t]++;
	}
	dp[0][0][0][0]=num[1];
	for(int a=0;a<=cnt[1];a++)
		for(int b=0;b<=cnt[2];b++)
			for(int c=0;c<=cnt[3];c++)
				for(int d=0;d<=cnt[4];d++){
					int r=a+b*2+c*3+d*4+1;
					if(a)dp[a][b][c][d]=max(dp[a][b][c][d],dp[a-1][b][c][d]+num[r]);
					if(b)dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b-1][c][d]+num[r]);
					if(c)dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c-1][d]+num[r]);
					if(d)dp[a][b][c][d]=max(dp[a][b][c][d],dp[a][b][c][d-1]+num[r]);
				}
	cout<<dp[cnt[1]][cnt[2]][cnt[3]][cnt[4]]<<'\n';
	return 0;
}