比赛 |
20150423 |
评测结果 |
AAAAAAAAAAAAAA |
题目名称 |
守卫标志物 |
最终得分 |
100 |
用户昵称 |
cstdio |
运行时间 |
2.082 s |
代码语言 |
C++ |
内存使用 |
15.15 MiB |
提交时间 |
2015-04-23 09:30:51 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<cstdlib>
using namespace std;
typedef long long LL;
const LL INF=1e18;
const int SIZEN=30;
LL F[1<<20]={0};
LL SH[1<<20]={0};
int N;
LL H;
LL height[SIZEN],mass[SIZEN],strength[SIZEN];
void work(void){
memset(F,-1,sizeof(F));
F[0]=INF;
LL ans=-1;
for(int s=1;s<(1<<N);s++){
for(int i=0;i<N;i++){
if((s>>i)&1){
int t=s^(1<<i);
if(mass[i]>F[t]) continue;
SH[s]=SH[t]+height[i];
F[s]=max(F[s],min(strength[i],F[t]-mass[i]));
}
}
if(SH[s]>=H){
ans=max(ans,F[s]);
}
}
if(ans==-1) cout<<"Mark is too tall"<<endl;
else cout<<ans<<endl;
}
void read(void){
cin>>N>>H;
for(int i=0;i<N;i++) cin>>height[i]>>mass[i]>>strength[i];
}
int main(){
freopen("guardc.in","r",stdin);
freopen("guardc.out","w",stdout);
read();
work();
return 0;
}