您的位置:首页 > 编程语言 > C语言/C++

emmmmm......滚动数组和0/1背包问题的一些新体会

2017-08-17 17:28 260 查看
今天下午上了一节课,讲的是关于dp问题,我觉得这里面有两个点挺吸引我的。

第一个就是当老师讲到了0/1背包问题的时候,说到了一个情况,那就是我们在什么时候采取dp这种方法做比较好

老师给的一个小限定就是

当背包的容量大小远远小于2的n次方(n是物品数量)

这个也不能想象,因为我们知道我们的0/1背包问题的复杂度,就是O(nc),(c是背包的容量)

如果我们的c不能和2的n次方形容一个明显的对比的话,那么我们用dp来做的话其实根本就没有一点点的优势呀。。。。。还不如直接用穷举来做算了。。。。

还有另外一个比较吸引我的点就是老师上课讲到了一个“滚动数组”的概念。

老师讲这个概念的时候是谈到最长公共子序列还有编辑距离的时候谈到的,就是因为我们的状态转移方程,依靠的是我们的当前

例如

dp[i][j]依赖的就是dp[i-1][j]和dp[i][j-1]以及dp[i-1][j-1],所以我们推推推到后面的时候,其实我们已经不太依赖前面的dp数组了,

所以我们可以简简单单的只是设定两个dp一维数组来进行滚动的储存~

我感觉这个思路挺新鲜的~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息