比赛 |
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;
}