<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>原文:http://blog.csdn.net/u012965373/article/details/45201153