【例9.11】01揹包問題
阿新 • • 發佈:2020-08-02
時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 12597 通過數: 7758
【題目描述】
一個旅行者有一個最多能裝 M 公斤的揹包,現在有 n 件物品,它們的重量分別是W1,W2,...,Wn,它們的價值分別為C1,C2,...,Cn,求旅行者能獲得最大總價值。
【輸入】
第一行:兩個整數,M(揹包容量,M≤200)和N(物品數量,N≤30);
第2..N+1行:每行二個整數Wi,Ci,表示每個物品的重量和價值。
【輸出】
僅一行,一個數,表示最大總價值。
【輸入樣例】
10 4
2 1
3 3
4 5
7 9
【輸出樣例】
12
#include<bits/stdc++.h> using namespace std; const int N=1010; int dp[N][N],wei[N],val[N]; int n,m,i,j; int main(){ cin>>m>>n; for(i=1;i<=n;i++) cin>>val[i]>>wei[i]; for(i=1;i<=n;i++){ for(j=0;j<=m;j++){ if(val[i]<=j) dp[i][j]=max(dp[i-1][j],dp[i-1][j-val[i]]+wei[i]); else dp[i][j]=dp[i-1][j]; } } cout<<dp[n][m]<<endl; return 0; }