比赛 |
20150423 |
评测结果 |
AAAAAAAAAAAAAA |
题目名称 |
守卫标志物 |
最终得分 |
100 |
用户昵称 |
Dijkstra |
运行时间 |
2.470 s |
代码语言 |
C++ |
内存使用 |
16.32 MiB |
提交时间 |
2015-04-23 11:23:09 |
显示代码纯文本
#include<fstream>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 20
#define INF 0x7fffffff
#define LL long long
using namespace std;
ifstream fin("guardc.in");
ofstream fout("guardc.out");
LL N,HH,m[MAXN],s[MAXN],h[MAXN];
LL H[1<<20],M[1<<20];
LL ans=-1;
int main()
{
memset(H,0,sizeof(H));
memset(M,0,sizeof(M));
fin>>N>>HH;
for(int i=0;i<N;i++) fin>>h[i]>>m[i]>>s[i];
M[0]=INF;
for(int i=0;i<(1<<N);i++)
{
for(int j=0;j<N;j++)
{
if((i>>j)&1)
{
if(m[j]>M[i-(1<<j)]) continue;
H[i]=H[i-(1<<j)]+h[j];
M[i]=max(M[i],min(M[i-(1<<j)]-m[j],s[j]));
}
}
if(H[i]>=HH) ans=max(ans,M[i]);
}
if(ans==-1) fout<<"Mark is too tall"<<endl;
else fout<<ans<<endl;
return 0;
}