比赛 Asm.Def战记之圣地亚哥“杯2015 评测结果 WWAWWWWWWW
题目名称 Asm.Def的枪榴弹 最终得分 10
用户昵称 Fmuckss 运行时间 0.402 s
代码语言 C++ 内存使用 18.31 MiB
提交时间 2015-10-31 11:49:16
显示代码纯文本
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<vector>
#include<map>
#include<queue>
#define maxn 1<<14
using namespace std;
int n,ba,bb,bc,ans=0;
struct fs{
	vector<int>a;
	vector<int>b;
	vector<int>c;
}f[maxn+5];
struct room{
	int a[6];
}rs[15];
void read(){
	scanf("%d",&n);
	for(int i=1;i<=5;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&rs[j].a[i]);
		}
	}
	scanf("%d %d %d",&ba,&bb,&bc);
	f[0].a.push_back(ba);
	f[0].b.push_back(bb);
	f[0].c.push_back(bc);
}
void enter(int nr,int noen,int r){//进入房间后的结果 
	for(int i=0;i<f[noen].a.size();i++){
		int a1=f[noen].a[i],b1=f[noen].b[i],c1=f[noen].c[i];
		if(a1-rs[r].a[1]>=0){
			a1-=rs[r].a[1];
		}else{
			c1-=(rs[r].a[1]-a1);
			a1=0;
		}
		if(b1-rs[r].a[2]>=0){
			b1-=rs[r].a[2];
		}else{
			c1-=(rs[r].a[2]-b1);
			b1=0;
		}
//		printf("a:%d b:%d c:%d\n",a1,b1,c1);
		if(c1>=0){
			a1+=rs[r].a[3];
			b1+=rs[r].a[4];
			c1+=rs[r].a[5];
			f[nr].a.push_back(a1);
			f[nr].b.push_back(b1);
			f[nr].c.push_back(c1);
			ans=max(ans,a1+b1+c1);
		}
	}
}
void gg(int nr){//少进一个房间的情况 
	for(int i=1;i<=n;i++){
		int r=(1<<(i-1));
		int noen;
		if(r&nr){
			noen=nr-r&nr;
//			printf("jinru:%d bujin:%d shangci:%d:\n",nr,r,noen);
			enter(nr,noen,r);
//			printf("%d\n",ans);
		}
	}
}
int fw(int now,int q,int re,int tot){
	if(now==re){
//		printf("%d:%d\n",re,tot);
		gg(tot);
	}
	for(int i=q;i<=n;i++){
		fw(now+1,i+1,re,tot|(1<<(i-1)));
	}
}
void solve(){
	for(int k=1;k<=n;k++){
		fw(0,1,k,0);
	}
}
int main(){
	freopen("asm_grenade.in","r",stdin);
	freopen("asm_grenade.out","w",stdout);
	read();
	solve();
	printf("%d",ans);
	return 0;
}