显示代码纯文本
#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;
}