超市搞活动(完全背包)
作者:互联网
Description
某超市举行活动,凡参加活动的市民,可以领到一个容量为C的箱子。超市里面的商品任意挑选,每种商品可拿的个数也无限制,只要能装进这个箱子(不超出箱子的容量),就可以免费拿走。
Input
多测试用例。
每个测试用例第一行是两个正整数 C 和 N ,( 0 < C ≤ 10,000, 0 < N < 10,000 ),C 表示箱子的容量,N 表示超市里面商品的总数量。
接下来 N 行,每行两个正整数 Pi 和 Qi ( 0 < Pi < 1000 , Qi > 0 , 1 ≤ i ≤ N ) ,表示第i件商品的价值和体积。
Output
每个测试用例输出一行:你能够免费拿走的商品的最大价值总和。
Sample Input
4 2
7 3
4 2
Sample Output
8
#include<stdio.h>
#include<string.h>
int max(int a,int b)
{
if(a>=b)
return a;
else
return b;
}
int main()
{
int T,n,C,i,j;
int w[1010];
int v[1010];
int dp[13010];
while(scanf("%d%d",&C,&n)!=EOF)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d%d",&v[i],&w[i]);
///第零行第零列的值为0,循环下标从1开始,i表示第几个物品,j表示重量
for(i=1;i<=n;i++)
{
for(j=w[i];j<=C;j++)
{
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}
printf("%d\n",dp[C]);
}
return 0;
}
标签:箱子,背包,int,完全,超市,商品,测试用例,dp 来源: https://blog.csdn.net/There_there/article/details/122143681