动态规划初步
happy_doy
这个作者很懒,什么都没留下…
展开
-
硬币问题
题意:给你一个整数S,有各种类型面值不一的硬币,求刚好凑成S所需的最大数量以及最小数量。 分析: 其本质也是DAG问题,S可以由一个个硬币凑出来,每使用一个硬币i,其状态就转移到了S-i;它的起点是S,终点是0 求最长路的代码:#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using翻译 2016-09-11 09:57:28 · 374 阅读 · 0 评论 -
DAG上的动态规划
DAG模型:有n个矩形,每个矩形用两个整数a,b描述,表示长和宽,矩形(a,b)可以嵌套在矩形(c,d)中,当且仅当a#include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring>using namespace std; const int maxx=100; int G翻译 2016-09-08 20:59:15 · 386 阅读 · 0 评论 -
单向TSP(unidirectional TSP,UVa 116)
问题: 给你一个n行m列的整数矩形,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列。要求经过的整数之和最小,整个矩形是环形的,即第一行的上一行是最后一行,最后一行的下一行是第一行,输出路径上每列的行号,多解时输出字典序最小的。 分析: 每一列就是一个状态,这个状态是由前一列的右上,右,右下得到的,要得到每个状态的最小值,只需比较右上,右,右下的最小值就好了原创 2016-09-22 10:36:01 · 1397 阅读 · 3 评论 -
Lighing System Design(Uva 11400)
这个题目的意思很难搞懂,要是知道意思就不会一头雾水。题目的大概意思就是:有n种灯泡,每种灯泡有电压值,电源费用,每个灯的价格,所需的灯泡数量。有一个条件,就是电压小的灯泡可以换成电压大的灯泡,需要注意的是,灯泡电压小的在电压大的环境下可以不需要额外的电源,用电压大的电源就可以了,只需计算换灯泡的钱就可以。这个问题需要我我们解决的就是,需要这么多的灯泡,你可以换灯泡,最后求得所有的钱最小。举个例子就好原创 2016-10-25 16:55:40 · 255 阅读 · 0 评论 -
最长上升子序列LIS
问题: 给定n个整数A1,A2,A3,A4,A5,….An,从左到右的顺序尽量选出多个整数,组成一个上升子序列,相邻元素不相等。例如:1,6,2,3,7,5,它的最长上升子序列为:1,2,3,5。 分析: 刚开始想这个问题的时候我想用递归来解决问题,可是后来考虑到递归的时间复杂度高,就觉得不能使用,并且本来就是在刷dp啊。想来很久,无果。在网上一看分析,就懂了。还是太菜啊。具体思路,序列很长,原创 2016-10-04 17:31:58 · 266 阅读 · 0 评论 -
背包问题
物品无限的背包问题: 题意:有n个物品,每件均有无穷多个,第i个物品的体积为V[i],重量为W[i]。选一些物品装到容量为C的背包中,使得物品的总体积不大于背包的体积情况下重量最大。 分析: 这个问题和之前的硬币问题类似,增加了一个新的属性——重量,把无权图变成了有权图,很简单就把”+1“改成“+W[i]”就行了; 代码:#include <iostream> #include <cstri原创 2016-09-25 11:10:40 · 286 阅读 · 0 评论