记录编号 |
544911 |
评测结果 |
AAAAAAWAAA |
题目名称 |
[SYOI 2015] Asm.Def的枪榴弹 |
最终得分 |
90 |
用户昵称 |
欧鹰123 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.005 s |
提交时间 |
2019-10-23 20:54:30 |
内存使用 |
13.66 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10-48+ch;ch=getchar();}
return x*f;
}
const int maxn=20;
int ans,n;
int a[maxn],b[maxn],c[maxn],d[maxn],e[maxn];
int k0,k1,k2;
int f[maxn];
bool vis[maxn];
void init()
{
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)b[i]=read();
for(int i=1;i<=n;i++)c[i]=read();
for(int i=1;i<=n;i++)d[i]=read();
for(int i=1;i<=n;i++)e[i]=read();
for(int i=1;i<=n;i++)
f[i]=c[i]+d[i]+e[i]-a[i]-b[i];
k0=read(),k1=read(),k2=read();
}
bool check(int now)
{
for(int i=1;i<=n;i++)
if(!vis[i]&&f[i]>0)now+=f[i];
if(now<=ans)return 0;
return 1;
}
bool jd(int x,int &a1,int &a2,int &a3)
{
if(a1>=a[x]&&a2>=b[x])
{
a1-=a[x];
a2-=b[x];
return 1;
}
else if(a1<a[x])
{
if(a1+a3>=a[x])
{
a3-=(a[x]-a1);
a1=0;
if(a2>=b[x])
{
a2-=b[x];
return 1;
}
else if(a2+a3>=b[x])
{
a3-=(b[x]-a2);
a2=0;
return 1;
}
else return 0;
}
else return 0;
}
else if(a2<b[x])
{
if(a2+a3>=b[x])
{
a3-=(b[x]-a2);
a2=0;
if(a1>=a[x])
{
a1-=a[x];
return 1;
}
else if(a1+a3>=a[x])
{
a3-=(a[x]-a1);
a1=0;
return 1;
}
else return 0;
}
else return 0;
}
return 0;
}
void dfs(int x,int a1,int a2,int a3)
{
a1+=c[x];a2+=d[x];a3+=e[x];
vis[x]=1;
int num=a1+a2+a3;
if(!check(num))return;
ans=max(num,ans);
for(int i=n;i>=1;i--)
{
if(vis[i])continue;
if(a1>=a[i]&&a2>=b[i])dfs(i,a1-a[i],a2-b[i],a3);
else if(a1<a[i])
{
if(a1+a3>=a[i])
{
int qwq=a3;
qwq-=(a[i]-a1);
if(a2>=b[i])dfs(i,0,a2-b[i],qwq);
else if(a2+qwq>=b[i])
{
qwq-=(b[i]-a2);
dfs(i,0,0,qwq);
}
else continue;
}
else continue;
}
else if(a2<b[i])
{
if(a2+a3>=b[i])
{
int qwq=a3;
qwq-=(b[i]-a2);
if(a1>=a[i])dfs(i,a1-a[i],0,qwq);
else if(a1+qwq>=a[i])
{
qwq-=(a[i]-a1);
dfs(i,0,0,qwq);
}
else continue;
}
else continue;
}
}
vis[x]=0;
}
int main()
{
freopen("asm_grenade.in","r",stdin);
freopen("asm_grenade.out","w",stdout);
n=read();
init();
int djj,lxy,ziiidan;
for(int i=n;i>=1;i--)
{
djj=k0,lxy=k1,ziiidan=k2;
if(jd(i,djj,lxy,ziiidan))
{
memset(vis,0,sizeof(vis));
dfs(i,djj,lxy,ziiidan);
}
}
cout<<ans<<'\n';
return 0;
}