白書2.3.1 01揹包問題的遞歸解決方法

有n個重量和價值分別爲wi, vi的物品,從這些物品中挑選出總重量不超過W的物品,求所有挑選方案中價值的最大值

ps:遞歸版01揹包是揹包問題中最初級的解法、01揹包從這裏入手!

#include <bits/stdc++.h>
using namespace std; 

int N, W;
int w[100], v[100];

int rec(int i, int j)
{
	int res;
	if (i == N)res = 0;
	else if (j >= w[i]){
		res = max(v[i] + rec(i + 1, j - w[i]), rec(i + 1, j)); 
	}else res = rec(i + 1, j);
	return res;
} 

int main()
{
	//輸入個數及重量 
	cin >> N >> W;
	for (int i = 0; i < N; ++i){
		cin >> w[i] >> v[i];
	} 
	cout << rec(0, W) << endl;
	return 0;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章