01背包 -- 动态规划的入门题目

<strong><span style="font-size:18px;">首先说什么是动态规划:

经常听到   DP:
Dynamic Programming的缩写

这里的入门题是这样的:
                                           01背包
有重量与价值分别为Wi 和 Vi的 n  个物品。请从中选出物品,在重量综合不超过w的前提下,求出价值最大的。

样例:
input:

n = 4

(w, v) = {(2.3), (1, 2), (3, 4), (2, 3)}

W = 5

outtput:
7(选择的是0, 1, 3号的物品)

#include <iostream>
#include <cstdio>
#define MAXN 1000
using namespace std;
int n, W;
int w[MAXN], v[MAXN];
int rec(int i, int j)
{
		int res;
		if(i == n)
		{
			return res == 0;
		}
		else if(j < w[i])
		{
				res = rec(1 + i, j);
		}
		else
		{
			res = max(rec(i + 1, j), rec(i + 1, j - w[i]) + v[i]);
		}
		return res;
}
int main()
{
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		cin >> w[i] >>v[i];
	}		
   	cin>>W;	
	cout<<rec(0, W)<<endl;
	return 0;
}
</span></strong>

你可能感兴趣的:(01背包 -- 动态规划的入门题目)