题解

1 条题解

  • 0
    @ 2019-12-01 22:38:23

    std
    套的模板,注意不能等于m,必须小于m

    //01背包模板
    #include <iostream>
    #include <cstring>
    using namespace std;
    const int nmax=5e6+10;
     
    int v[nmax];//v[i]表示第i个物品的价值value 
    int w[nmax];//w[i]表示第i个物品的重量weight 
    int dp[nmax];//总价值 
    int n,m;//n表示物品数量,m表示背包容量
     
    int main() {//一维数组实现的01背包模板 
        cin>>n>>m; 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=m;j>=0;j--){//01背包容量 逆序遍历
              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;
    }
    
  • 1

信息

ID
1015
难度
8
分类
(无)
标签
(无)
递交数
41
已通过
5
通过率
12%
上传者