动态规划
sysu_yinzch
这个作者很懒,什么都没留下…
展开
-
【01背包】原型
推荐两份读物:《背包问题九讲》,从属于《动态规划的思考艺术》系列。 从简单的“01背包”开始讲动态规划的原理:“最优子结构”和“状态转移方程”。 (1)用子问题定义状态:即F[i, v]表示前i件物品恰放入一个容量为v的背包可以 获得的最大价值。则其状态转移方程便是: F[i, v] = max( F[i -1, v] , F[i-1,v-Ci] + Wi ) (2)F[v] =原创 2014-01-07 15:16:34 · 508 阅读 · 0 评论 -
【动态规划之路径选择】
Example: Hdu 2571 “命运” http://acm.hdu.edu.cn/showproblem.php?pid=2571 解:类似“装配线调度问题”,构造转移方程——当前的最优解依赖前一个最优解的选择,整体的最优解的局部也是最优的。 #include #include using namespace std; int a[25][1010]; int max(int x,原创 2014-01-07 16:46:55 · 578 阅读 · 0 评论 -
【01背包】问题变形——饭卡
Example:hdu 2546:http://acm.hdu.edu.cn/showproblem.php?pid=2546 解:利用“01背包”状态方程:F[v] = max(F[v], F[v-ci]+wi) (1)对这个问题来说,干扰项是最后的5元,可以买任何一道菜,所以可以先用5元买最贵的一道菜(反正买最后一道菜时 至少要有5元余额,不如先不考虑这5元);去掉干扰项后就是一个“0原创 2014-01-07 15:26:02 · 799 阅读 · 0 评论 -
【01背包】采药
Sicily 1146 采药 http://soj.me/1146 原始的01背包问题,引用一个代码实现 http://blog.csdn.net/chinaczy/article/details/5513957 //传统非滚动数组实现形式 #include #include using namespace std; int s[1000][1000]; int main() { i转载 2014-01-11 10:51:10 · 415 阅读 · 0 评论 -
【动态规划 变形】Pick numbers:实际上还是背包
Example:pick numbers (scicily 1158 http://soj.me/1158) 菜鸟:BFS 大牛:DP 大牛的代码:你用多长时间看懂了? /** * sicily 1158 pick numbers * M, N (2<=M<=10, 2<=N<=10), **/ #include using namespace std; #define Ma原创 2014-01-11 22:48:12 · 532 阅读 · 0 评论 -
【动态规划 变形】fight club
Example: 解:真的变形了,重点是,知道这是一个dp问题,并能定义出状态—— 解题思路: (1)要成为圈中唯一剩下的人,则其他人全部都要打败,而每个人只能与旁边的人战斗,因此对于每个状态下每个人只关心两边的人。 (2)动态规划,状态为区间[i,j],表示从第i个人逆时针方向数到第j个人之间所有人(不包括i和j)都已经被打败。 状态转移,每个区间[i,j]能够达到,则需要在i和j之间原创 2014-01-11 22:55:54 · 640 阅读 · 0 评论 -
【分组背包】开心的金明
Example:sicily 1346 “开心的金明” http://soj.me/1346 思路分析:背包问题,只是主件绑定了一些附件,可以转化成分组背包,一个主件及其附件代表一组。 但是“分组背包”中一组地物品互斥,所以这里要做一次转化:将{不取,只取主件,取主件和附件1,取主件和附件2,取主件和两个附件}这个集合作为一组, 这里要庆幸最多两个附件。 解:for (i=1;i<原创 2014-01-13 15:25:31 · 660 阅读 · 0 评论