魔兽争霸是
2014-08-31 19:11 chenjwhz 阅读(153) 评论(0) 收藏 举报
Sample Input
4 3 1 3 2 4 3 5 4 6 4 3 1 2 2 5 3 6 4 7
Sample Output
9 7
解析:
这是道多重背包的问题,因此用多重背包的经典代码即可解决,见如下代码:
# include<stdio.h>
# include<string.h>
struct node
{
int v;
int w;
}g[105];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int nCase,nVal;
int i,j;
int dp[2005];
while((scanf("%d %d",&nCase,&nVal))!=EOF)
{
for(i=0;i<nCase;i++)
scanf("%d %d",&g[i].v,&g[i].w);
memset(dp,0,sizeof(dp));
for(i=0;i<nCase;i++) //多重背包的经典代码
for(j=g[i].v;j<=nVal;j++)
dp[j]=Max(dp[j-g[i].v]+g[i].w,dp[j]);
printf("%d\n",dp[nVal]);
}
return 0;
}
浙公网安备 33010602011771号