动态规划
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 · 498 阅读 · 0 评论 -
【动态规划之路径选择】
Example: Hdu 2571 “命运” http://acm.hdu.edu.cn/showproblem.php?pid=2571解:类似“装配线调度问题”,构造转移方程——当前的最优解依赖前一个最优解的选择,整体的最优解的局部也是最优的。#include#includeusing namespace std;int a[25][1010];int max(int x,原创 2014-01-07 16:46:55 · 547 阅读 · 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 · 787 阅读 · 0 评论 -
【01背包】采药
Sicily 1146 采药 http://soj.me/1146原始的01背包问题,引用一个代码实现 http://blog.csdn.net/chinaczy/article/details/5513957//传统非滚动数组实现形式#include#includeusing namespace std;int s[1000][1000];int main(){ i转载 2014-01-11 10:51:10 · 400 阅读 · 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 · 524 阅读 · 0 评论 -
【动态规划 变形】fight club
Example:解:真的变形了,重点是,知道这是一个dp问题,并能定义出状态——解题思路:(1)要成为圈中唯一剩下的人,则其他人全部都要打败,而每个人只能与旁边的人战斗,因此对于每个状态下每个人只关心两边的人。(2)动态规划,状态为区间[i,j],表示从第i个人逆时针方向数到第j个人之间所有人(不包括i和j)都已经被打败。状态转移,每个区间[i,j]能够达到,则需要在i和j之间原创 2014-01-11 22:55:54 · 632 阅读 · 0 评论 -
【分组背包】开心的金明
Example:sicily 1346 “开心的金明” http://soj.me/1346思路分析:背包问题,只是主件绑定了一些附件,可以转化成分组背包,一个主件及其附件代表一组。 但是“分组背包”中一组地物品互斥,所以这里要做一次转化:将{不取,只取主件,取主件和附件1,取主件和附件2,取主件和两个附件}这个集合作为一组, 这里要庆幸最多两个附件。解:for (i=1;i<原创 2014-01-13 15:25:31 · 636 阅读 · 0 评论