记录编号 96664 评测结果 AAAAAAAAAA
题目名称 [USACO Feb14] 奶牛的十项全能 最终得分 100
用户昵称 GravatarDijkstra 是否通过 通过
代码语言 C++ 运行时间 1.825 s
提交时间 2014-04-14 14:31:15 内存使用 4.32 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fin("deca.in");
ofstream fout("deca.out");
int F[1<<20]={0},skill[21][21]={{0}};
int N,B;
struct award
{
	int k,p,a;
}w[21];
int NUM(int x)
{
	int sum=0;
	while(x)
	{
		sum+=x%2;
		x/=2;
	}
	return sum;
}
int main()
{
	fin>>N>>B;
	int i,j,k,l;
	for(i=1;i<=B;i++) fin>>w[i].k>>w[i].p>>w[i].a;
	for(i=1;i<=N;i++)for(j=1;j<=N;j++)fin>>skill[i][j];
	for(i=1,j=1;i<(1<<N);i<<=1,j++)
	{
		F[i]=skill[j][1];
		for(k=1;k<=B;k++) if(w[k].k==1&&w[k].p<=skill[j][1]) F[i]+=w[k].a;
	}
	for(i=1;i<(1<<N);i++)
	{
		int sum=NUM(i);
		for(j=1,k=1;j<i;j<<=1,k++)
		{
			if(i&j)
			{
				int score=F[i-j]+skill[k][sum],add=0;
				for(l=1;l<=B;l++) if(w[l].k==sum&&w[l].p<=score) add+=w[l].a;
			    F[i]=max(F[i],score+add);
			}
		}
	}
	fout<<F[(1<<N)-1]<<endl;
	return 0;
}