完全背包模板

#include <iostream>
#include<cstring>
using namespace std;
const int nmax=1000;
 
int v[nmax];//v[i]表示第i个物品的价值value 
int w[nmax];//w[i]表示第i个物品的重量weight 
int dp[nmax];//总价值 
int n,m;//n表示物品数量,m表示背包容量
 
int main(int argc, char** argv) {//一维数组实现的完全背包模板 
    while(cin>>n>>m){
        memset(dp,0,sizeof(dp));
        for(int i=0;i<n;i++){
            cin>>w[i]>>v[i];
        }
        for(int i=0;i<n;i++){//遍历n个物品 
            for(int j=0;j<=m;j++){//完全背包容量 顺序遍历
              if(j>=w[i]){
                  dp[j]=max(dp[j],(dp[j-w[i]]+v[i]));
              }//第i个物体不选,dp[j]=dp[j];
               //第i个物体若选    dp[j]=dp[j-w[i]]+v[i]
            } 
        }
        cout<<dp[m]<<endl;
    }
    
    return 0;
}

参考博客:https://www.cnblogs.com/FrankChen831X/p/11423350.html

原文地址:https://www.cnblogs.com/-citywall123/p/13472335.html