记录编号 297275 评测结果 AAAAAAAAAA
题目名称 多人背包 最终得分 100
用户昵称 GravatarFoolMike 是否通过 通过
代码语言 C++ 运行时间 0.771 s
提交时间 2016-08-16 20:05:56 内存使用 1.44 MiB
显示代码纯文本
#include<cstdio>
int k,n,v,wei,val,dp[5010][60],q1[60],q2[60],ans;
int main()
{
	freopen("bags.in","r",stdin);
	freopen("bags.out","w",stdout);
	scanf("%d%d%d",&k,&v,&n);
	for (int i=0;i<=n;i++)
	for (int j=1;j<=k;j++)
		dp[i][j]=-9999999;
	dp[0][1]=0;
	while (n--){
		scanf("%d%d",&wei,&val);
		for (int i=v;i>=wei;i--){
			for (int j=1;j<=k;j++)
				q1[j]=dp[i][j],q2[j]=dp[i-wei][j]+val;
			int h1=1,h2=1,cnt=0;
			while (cnt<k){
				cnt++;
				if (q1[h1]>q2[h2]) dp[i][cnt]=q1[h1++];
					else dp[i][cnt]=q2[h2++];
			}
		}
	}
	for (int i=1;i<=k;i++) ans+=dp[v][i];
	printf("%d\n",ans);
	return 0;
}