记录编号 |
455271 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[SYOI 2015] Asm.Def的枪榴弹 |
最终得分 |
100 |
用户昵称 |
胖周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;
}