动态规划的用法——01背包问题
问题主题:著名的01背包问题 |
问题描述: 有n个重量和价值分别为wi、vi的物品,现在要从这些物品中选出总重量不超过W的物品,求所有挑选方案中的价值最大值。 限制条件: 1<=N<=100 1<=wi 、vi<=100 1<=wi<=10000 |
样例: 输入 N=4 W[N] = {2, 1, 3, 2} V[N] = {3, 2, 4, 2} 输出 W = 5(选择0,1,3号) |
【解法一】
解题分析:
用普通的递归方法,对每个物品是否放入背包进行搜索
程序实现:
C++
#include <stdio.h> include <tchar.h>include <queue>include "iostream"using namespace std; const int N = 4; } int main() { |
【解法二】
解题分析:
用记录结果再利用的动态规划的方法,上面用递归的方法有很多重复的计算,效率不高。我们可以记录每一次的计算结果,下次要用时再直接去取,以提高效率
程序实现:
C++
#include <stdio.h> include <tchar.h>include <queue>include "iostream"using namespace std; const int N = 4;
} int solve(int i, int residue)
} int main() {
} <br/><p/> |
Java
package greed; /**
class Stuff{
}<br/><br/><pre/> |
算法复杂度:
时间复杂度O(NW)