比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 AAAAAAAAAA
题目名称 Asm.Def的枪榴弹 最终得分 100
用户昵称 mikumikumi 运行时间 2.449 s
代码语言 C++ 内存使用 79.11 MiB
提交时间 2015-10-31 11:36:36
显示代码纯文本
#include<cstdio>
#include<map>
using namespace std;
const int SIZEN=20;
int N;
int A[SIZEN],B[SIZEN],C[SIZEN],D[SIZEN],E[SIZEN];
bool H[SIZEN]={0};
map<int,bool> mp[151][151][151];
int ka,kb,kc;
int ans=0;
void read()
{
	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",&ka,&kb,&kc);
}
int get()
{
	int ans=0;
	for(int i=1;i<=N;i++) {ans<<=1;ans+=H[i];}
	return ans;
}
void dfs(int a,int b,int c,int now)
{
	int id=get();
	if(mp[a][b][c][id]==1) return;
	mp[a][b][c][id]=1;
	if(now>ans) ans=now;
	for(int i=1;i<=N;i++)
	{
		if(H[i]) continue;
		int ta=a-A[i],tb=b-B[i],tc=c;
		if(ta<0) tc+=ta,ta=0;
		if(tb<0) tc+=tb,tb=0;
		if(tc<0) continue;
		int maxc=0;
	    int nowa=ta+C[i],nowb=tb+D[i],nowc=tc+E[i];
		if(nowa<=a&&nowb<=b&&nowc<=c) continue;
		H[i]=1;
		dfs(nowa,nowb,nowc,nowa+nowb+nowc);
		H[i]=0;
	}
}
void work()
{
	int now=ka+kb+kc;
	ans=now;
	dfs(ka,kb,kc,now);
	printf("%d",ans);
}
int main()
{
	freopen("asm_grenade.in","r",stdin);
	freopen("asm_grenade.out","w",stdout);
	read();
	work();
	return 0;
}