记录编号 455271 评测结果 AAAAAAAAAA
题目名称 [SYOI 2015] Asm.Def的枪榴弹 最终得分 100
用户昵称 Gravatar胖周zzf 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2017-10-01 17:45:28 内存使用 1.05 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
int x[5][15]={0},n;
struct data{
	int a,b,c,d;bool f;
	void sum(){d=a+b+c;}
	data(){d=c=-1;f=1;}
}d[40000];
int b[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};
void DP(int now){
	if(now!=0){
		for(int i=0;i<n;i++){
			if((now>>i)&1==1&&d[now&(~b[i])].f==1)DP(now&(~b[i]));
		}
		data k;
		for(register int i=0;i<n;i++){
			if((now>>i)&1==1){
				k=d[now&(~b[i])];
				k.a-=x[0][i];
				if(k.a<0){k.c+=k.a;k.a=0;}
				k.b-=x[1][i];
				if(k.b<0){k.c+=k.b;k.b=0;}
				k.sum();
				if(k.d>=0&&k.c>=0){
					k.a+=x[2][i];
					k.b+=x[3][i];
					k.c+=x[4][i];
					k.sum();
					if(k.d>d[now].d)d[now]=k;
					if(k.d==d[now].d&&k.c>d[now].c)d[now]=k;
				}
			}
		}
		d[now].f=0;
	}
}
int main(){
	freopen("asm_grenade.in","r",stdin);
	freopen("asm_grenade.out","w",stdout);
	scanf("%d",&n);int m=0,ans=0;
	for(register int i=0;i<5;i++)
		for(register int j=0;j<n;j++)
			scanf("%d",&x[i][j]);
	scanf("%d%d%d",&d[0].a,&d[0].b,&d[0].c);d[0].sum();
	for(register int i=0;i<n;i++)m=m|b[i];
	DP(m);
	for(register int i=0;i<=m;i++)
		if(d[i].d>ans)ans=d[i].d;
	printf("%d",ans);
	return 0;
}