记录编号 455109 评测结果 AAAAAAAAAA
题目名称 [SYOI 2015] Asm.Def的枪榴弹 最终得分 100
用户昵称 GravatarAAAAAAAAAA 是否通过 通过
代码语言 C++ 运行时间 0.105 s
提交时间 2017-10-01 12:05:36 内存使用 11.87 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
namespace IO{
	char buf[1<<15],*fs,*ft;
	inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))? 0:*fs++;}
	inline int qr(){
		int x=0;char c=gc();
		while(c<'0'||c>'9'){
			c=gc();}
		while(c>='0'&&c<='9'){
			x=(x<<1)+(x<<3)+c-'0';
			c=gc();}
		return x;}
}using namespace IO;
//==================================designed by AAAAAAAAAA===============================================//
/*struct Sta{
	int a,b,c;//三种武器数量 
	bool Check(){return a>=0&&b>=0&&c>=0;}
	int Cut(int x,int y,int z){a-=x;b-=y;c-=z;}
};*/
int a[100],b[100],q[100],w[100],e[100],K[4],n,tot,ans;
int f[20000][150];//状态为i,甲为j,最多有多少个丙 
int sum[20000];
//bool Check()
int main(){
	freopen ("asm_grenade.in","r",stdin);
	freopen ("asm_grenade.out","w",stdout);
	n=qr();
	for(int i=0;i<n;i++)a[i]=qr();
	for(int i=0;i<n;i++)b[i]=qr();
	for(int i=0;i<n;i++)q[i]=qr(),tot+=q[i];
	for(int i=0;i<n;i++)w[i]=qr();
	for(int i=0;i<n;i++)e[i]=qr();
	for(int i=1;i<=3;i++)K[i]=qr();
	sum[0]=K[1]+K[2]+K[3];tot+=K[1];
	for(int i=0;i<=(1<<n)-1;i++){
		int temp=i;
		sum[i]=sum[0];
		for(int j=0;j<n;j++){
			if((1<<j)&i){
				sum[i]+=(q[j]+w[j]+e[j]-a[j]-b[j]);
			}
		} 
	}
	memset(f,-1,sizeof(f));
	f[0][K[1]]=K[3];
	for(int i=0;i<=(1<<n)-1;i++){
		if(!sum[i])continue;
		for(int j=0;j<=tot;j++){
			if(sum[i]-f[i][j]-j<0||f[i][j]<0)continue;
			ans=max(ans,sum[i]);
			for(int k=0;k<n;k++){
				if((i>>k)&1)continue;
				int temp1,temp2,temp3;
				temp1=j;temp2=sum[i]-f[i][j];temp3=f[i][j];
				if(temp1<a[k]){temp3+=temp1-a[k];temp1=0;}
				else{temp1-=a[k];}
				if(temp2<b[k]){temp3+=temp2-b[k];temp2=0;}
				else{
					temp2-=b[k];
				}
				if(temp3<0)continue;
				temp1+=q[k];temp2+=w[k];temp3+=e[k];
				f[i|(1<<k)][temp1]=max(f[i|(1<<k)][temp1],temp3);
			}
		}
	} 
//	dfs(1);
	printf("%d",ans);
	return 0;
}