滚动数组的作用在于优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。
一个简单的例子:
斐波那契数列:
一般代码:
#include
#include
using namespace std;
int Fib[...
分类:
编程语言 时间:
2015-01-31 22:00:09
阅读次数:
380
0-1背包问题描述:
已知:小偷在店里偷东西,小偷只带了一个最大承重为W的背包,商店里有N件商品,第i件商品的重量是weight[i],价钱是value[i]。
限制:每种商品只有一件,可以选择拿或者不拿,不能分割,不能只拿一件商品的一部分(所以叫做0-1,0即不拿,1则整个拿走,且一种商品有且只有一件可供拿走)
问题:在不超过背包最大承重的情况下,最多能拿走多少钱的商品...
分类:
编程语言 时间:
2015-01-30 22:43:45
阅读次数:
296
有一个小偷在偷窃一家商店时发现有 n 件物品,第 i 件物品价值 vi 元,重 wi 磅,此处 vi 和 wi 都是整数。小偷希望带走的物品价值越高越好,但他的背包至多只能装下 W 磅的东西,W 为整数。为尽可能多的带走更多的东西,小偷可以带走物品的一部分,而不必做出 0-1 的二分选择。那么,小偷...
分类:
其他好文 时间:
2015-01-30 21:01:41
阅读次数:
198
动态规划(Dynamic Programming)是算法的设计方法之一,通常用于最优化问题,此类问题可能有多种可行解,而我们希望找出一个最优的解(最大或最小)。动态规划的设计可以分为以下几个步骤:
1.描述最优解的结构
2.递归的定义最优解的值
3.按自底向上的方式计算最优解的值
4.由计算出的结果构造一个最优解
...
分类:
其他好文 时间:
2015-01-29 14:42:38
阅读次数:
182
/***************************************************************************可以看成是3维背包问题,开的是四维数组,这个地方最好是用四维数组,因为有花费为0但是却又价值(估计现实是不会有的)的物品。f[i][j][k][t]...
分类:
其他好文 时间:
2015-01-29 14:14:54
阅读次数:
161
1.HDU 1114Piggy Bank一道简单的背包问题#include #include #include using namespace std;#define ll long longconst int N = 10005;const int INF = 0x3f3f3f3f;int dp[...
分类:
其他好文 时间:
2015-01-28 21:14:04
阅读次数:
251
本题难点:简单背包问题递归程序的理解简单背包问题问题定义:有一个背包重量是S,有n件物品,重量分别是W0,W1...Wn-1问能否从这n件物品中选择若干件放入背包中使其重量之和正好为S背包问题递归版本解释:其选择只有两种可能,选择一组物品中包含Wn-1 ,此时knap(s,n)的解就是knap(s ...
分类:
其他好文 时间:
2015-01-27 19:57:00
阅读次数:
233
完全背包问题题目:有N种物品和一个容量为v的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将那些物品装入背包可使这些物品的费用总和不超过背包容量且价值最大。基本思路:这个问题非常类似于01背包问题,所不同的是每种物品无限件。也就是从每种物品的角度考虑,与他相关的策略已...
分类:
其他好文 时间:
2015-01-26 22:20:03
阅读次数:
183
首先是自由评述:这几天的背包问题0 1包:逆序。结果由上一组元素刷过去的结果得来的。 1 void ZeroOnePack(int val,int vol) 2 { 3 4 int i; 5 for(i=V;i>=vol;i--) 6 { 7 if(dp[i...
分类:
其他好文 时间:
2015-01-26 16:27:31
阅读次数:
106
动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免反复计算。通经常使用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描写叙述一个最优解的结构,寻找子问题,对问题进行划分...
分类:
其他好文 时间:
2015-01-25 16:31:04
阅读次数:
140