白书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;
 } 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章