完全揹包問題

繼01揹包問題之後,
有 N 種物品和一個容量是 V 的揹包,每種物品都有無限件可用。

第 i 種物品的體積是 vi,價值是 wi。

求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。
輸出最大價值。

輸入格式

第一行兩個整數,N,V,用空格隔開,分別表示物品種數和揹包容積。

接下來有 N 行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i 種物品的體積和價值。

輸出格式

輸出一個整數,表示最大價值。

數據範圍
0<N,V≤1000
0<vi,wi≤1000
輸入樣例

4 5
1 2
2 4
3 4
4 5

輸出樣例
10

解法

對於每次輸入的物品體積和價值進行迭代計算比較取得最大值。

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

const int N=1000;

int main(){
    
    vector<int> dp(N,0);
    //種類和包容量
    int n,m;
    cin>>n>>m;
    
    for(int i=0;i<n;i++){
        int v,w;  //定義每個物品大小和價值
        cin>>v>>w;        
        for(int j=v;j<=m;j++){
            dp[j] = max(dp[j],dp[j-v]+w);
        }
    }
    cout<<dp[m]<<endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章