记录编号 544911 评测结果 AAAAAAWAAA
题目名称 [SYOI 2015] Asm.Def的枪榴弹 最终得分 90
用户昵称 Gravatar欧鹰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;
}