比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAAAT
题目名称 Asm.Def的枪榴弹 最终得分 90
用户昵称 debug 运行时间 1.747 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2015-10-31 10:51:49
显示代码纯文本
#include<cstdio>
using namespace std;
int n;
int a[22]={};
int b[22]={};
int c[22]={};
int d[22]={};
int e[22]={};
int k0,k1,k2;
int ans=0;
int maxx=0;
int k00,k11,k22;
int kj[22]={};
int kj2[22][3]={};
bool mm[22]={};
bool zhuangtai[22][22]={};
bool check(int a1,int a2,int a3,int a4)
{
	if(a3<0)
		return false;
	else if(a1+a3>kj2[a4][0]+kj2[a4][2])
		return true;
	else if(a2+a3>kj2[a4][1]+kj2[a4][2])
		return true;
	else if(a1+a2+a3>kj2[a4][0]+kj2[a4][1]+kj2[a4][2])
		return true;
	else return false;
}
void dfs(int aa)
{
	if(aa>n)
		return;
	for(int i=1;i<=n;i++)
		if(!mm[i])
		{
			int te0=kj2[aa-1][0]-a[i];
			int te1=kj2[aa-1][1]-b[i];
			int te2=kj2[aa-1][2];
			if(te0<0)
				te2+=te0,te0=0;
			if(te1<0)
				te2+=te1,te1=0;
			if(te2>=0)
			te0+=c[i],te1+=d[i],te2+=e[i];
			if(kj[i]<te0+te1+te2)
				kj[i]=te0+te1+te2;
			if(check(te0,te1,te2,aa))
				mm[i]=1,kj2[aa][0]=te0,kj2[aa][1]=te1,kj2[aa][2]=te2,dfs(aa+1),mm[i]=0;
		}
}
int main()
{
	freopen("asm_grenade.in","r",stdin);
	freopen("asm_grenade.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&b[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&c[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&d[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&e[i]);
	scanf("%d%d%d",&k0,&k1,&k2);
	maxx=k0+k1+k2;
	k00=k0,k11=k1,k22=k2;
	kj2[0][0]=k0,kj2[0][1]=k1,kj2[0][2]=k2;
	dfs(1);
	for(int i=0;i<=n;i++)
		if(kj[i]>maxx)
			maxx=kj[i];
	printf("%d\n",maxx);
	return 0;
}