记录编号 |
297275 |
评测结果 |
AAAAAAAAAA |
题目名称 |
多人背包 |
最终得分 |
100 |
用户昵称 |
FoolMike |
是否通过 |
通过 |
代码语言 |
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;
}