记录编号 96683 评测结果 AAAAAAAAAA
题目名称 [USACO Feb14] 奶牛的十项全能 最终得分 100
用户昵称 Gravatarys 是否通过 通过
代码语言 C++ 运行时间 4.026 s
提交时间 2014-04-14 15:19:12 内存使用 100.32 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,b;
struct node{
	int p,a;
};
node e[25][25];
int sum[25];
int f[25][1<<20],s[25][25];

void init(){
	int i,j,k;
	scanf("%d%d",&n,&b);
	for (i=1;i<=b;i++){
		scanf("%d",&k);
		sum[k]++;
		scanf("%d%d",&e[k][sum[k]].p,&e[k][sum[k]].a);
	}
	for (i=1;i<=n;i++)
	for (j=1;j<=n;j++)
		scanf("%d",&s[i][j]);
}

int calc(int x){
	int i,temp=0;
	for (i=1;i<1<<n;i<<=1)
	if (x & i) temp++;
	return temp;
}
	

void DP(){
	int i,j,k,t,temp,ans,cow,extra;
	for (i=1;i<=n;i++){
		for (j=1<<(i-1);j<1<<n;j++){
			if (calc(j)!=i) continue;
			cow=0;ans=0;
			for (k=1;k<1<<n;k<<=1){
				cow++;
				if (!(j & k)) continue;
				temp=f[i-1][j^k]+s[cow][i];
				extra=0;
				for (t=1;t<=sum[i];t++)
					if (temp>=e[i][t].p) extra+=e[i][t].a;
				temp+=extra;
				ans=max(ans,temp);
			}
			f[i][j]=ans;
		}
	}
	printf("%d\n",f[n][(1<<n)-1]);
}
			

int main(){
freopen("deca.in","r",stdin);
freopen("deca.out","w",stdout);
	init();
	DP();

	return 0;
}