接触动态规划的第一题是数塔问题,第二题就是01背包问题了。当时看的懵懵懂懂,回过头来再看这道题还是非常简单的了。用 dp[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-cost[i]]+...
分类:
其他好文 时间:
2014-07-18 19:00:42
阅读次数:
266
01背包,DP简答题就行,要用滚动数组,不然内存要爆。for循环的方向很重要,虽然是简单题,但对理解DP帮助很大,听队长说要把每一个状态写出来,我试着写了一下,果然更容易理解了。 1 #include 2 #include 3 #define doumax(a,b) (a>b?a:b) 4 cons...
分类:
其他好文 时间:
2014-07-18 09:23:32
阅读次数:
181
DP 一直是心中痛,不多说了,这个暑假就坑在这上了。
这暑假第一道DP题,01背包问题。
题意是说物品有 重量和价值 ,但你能承受的重量有限,问你能带的最大价值。
这题数组开大点,虽然不知道有啥坑点,但是我数组开得大,直接1A了。
#include
#include
#include
#include
#include
#include
#include
#incl...
分类:
其他好文 时间:
2014-07-08 10:33:09
阅读次数:
229
最简单的背包问题了,本题应该除了背包就一个考点了:不能开二维数组。我没开过二维,不过看数据是不可以的。太大了。
做法有两种改进省内存DP:
1 所谓的滚动数组
2 逆向填表
很久没做背包DP,突然觉得这种背包问题很简单了。
下面给出两种解法:
1 calBag()是滚动数组
2 calBag2()是逆向填表
#pragma once
#include
#inclu...
分类:
其他好文 时间:
2014-06-27 08:09:43
阅读次数:
165