题解 | 【模板】完全背包

【模板】完全背包

https://www.nowcoder.com/practice/237ae40ea1e84d8980c1d5666d1c53bc

#include <bits/stdc++.h>

using namespace std;

#define N (int)(1e3+5)

int dp[N];
int dp2[N];
int value[N],volume[N];

int my_max(int a,int b){
    return (a>b)?a:b;
}

int main(){
    int n,V;
    scanf("%d %d",&n,&V);
    for(int i=0;i<n;i++){
        scanf("%d %d",&volume[i],&value[i]);
    }
    for(int i=1;i<=V;i++){
        dp2[i]=INT_MIN;
    }

    for(int i=0;i<n;i++)//遍历每种物品
    {
        //正序可以多次使用物品,累加物品
        for(int j=volume[i];j<=V;j++){
            dp[j]=my_max(dp[j],dp[j-volume[i]]+value[i]);
            dp2[j]=my_max(dp2[j],dp2[j-volume[i]]+value[i]);
        }
    }
    printf("%d\n",dp[V]);
    if(dp2[V]>0) printf("%d\n",dp2[V]);
    else printf("%d\n",0);
    return 0;
}

#动态规划#
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务