比赛 |
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;
}