1. 程式人生 > 實用技巧 >【例9.11】01揹包問題

【例9.11】01揹包問題

時間限制: 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;
}