完全背包

题目

ACwing

分析

完全背包与01背包的区别在于,每种物品是否可以无限个。意思就是完全背包可以重复取同一间物品。代码上与01背包的不同点在于,在遍历背包容量时要正序遍历,因为倒叙遍历对应只使用取一次物品的情况。

代码

#include<iostream>
#include<algorithm>
using namespace std;

int main(){
    int n,v;
    cin>>n>>v;
    vector<int>dp(v+1,0); //dp数组表示最大价值
    vector<int>weight(n); //物品的体积
    vector<int>value(n); // 物品的价值
    for(int i = 0;i < n;i++){
        cin>>weight[i]>>value[i];
    }
    //先遍历背包,再遍历容量,容量正序遍历
    for(int i = 0;i < n;i++){
        for(int j = weight[i];j <= v;j++){
            dp[j] = max(dp[j],dp[j-weight[i]] + value[i]);
        }
    }
    cout<<dp[v];
    return 0;
}
原文地址:https://www.cnblogs.com/fresh-coder/p/14407688.html