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