标签:
<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