其他分享
首页 > 其他分享> > 超市搞活动(完全背包)

超市搞活动(完全背包)

作者:互联网

Description

某超市举行活动,凡参加活动的市民,可以领到一个容量为C的箱子。超市里面的商品任意挑选,每种商品可拿的个数也无限制,只要能装进这个箱子(不超出箱子的容量),就可以免费拿走。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

Input

多测试用例。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

每个测试用例第一行是两个正整数 CN ,( 0 < C ≤ 10,000,  0 < N < 10,000 ),C 表示箱子的容量,N 表示超市里面商品的总数量。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

接下来 N 行,每行两个正整数 PiQi  ( 0 < Pi < 1000  , Qi > 0 , 1 ≤ iN ) ,表示第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