动态规划
__Lingyue__
微软亚洲研究院 实习生
展开
-
uva10817 校长的烦恼 利用-ans
1. 利用int& ans保存当前状态,因为他不会随着下标的改变而改变,防止下表改变而出现的bug。2. 增加维度来解决状态的表示,找明白状态,决策,状态转换。3. 通过记忆化来枚举所有可以完成规定任务的代价看哪个少,通过赋值INF 和 0 来方便比较。原创 2016-08-05 00:45:19 · 425 阅读 · 0 评论 -
HDU 2412 Party at Hali-Bula 树形DP
Problem: 有一颗上下级关系的书,对于每一个节点来说,它和它的直系上级不能同时存在,问这棵树最多有多少个节点可以同时存在。原创 2017-01-27 16:45:22 · 345 阅读 · 0 评论 -
hdu 4778 Gems Fight!【状态压缩,记忆化搜索dp】
Problem: 有B个盒子里面放有G种颜色的宝石,两个人轮流选一个盒子将其中的宝石取出来放到一个锅里,然后其中每有S个相同颜色的宝石,它们就会聚合在一起变成一个魔法石(可能产生多个魔法石且锅里有可能有剩余的宝石),然后本轮的得分就是产生的魔法石的数量,且如果本轮某个人拿到了魔法石的话,那么下一轮他还可以继续选择盒子放入宝石,直到他在某一轮没有拿到魔法石,现在问两个人都采用最优策略的情况下,到最后原创 2017-02-13 14:58:32 · 654 阅读 · 0 评论 -
poj 1185 炮兵阵地 【状态压缩dp】
Problem: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用”H” 表示),也可能是平原(用”P”表示),在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图+号部分: 炮兵的攻击范围不受地形的影响,原创 2017-02-10 19:47:06 · 397 阅读 · 0 评论 -
hdu 5418 Victor and World TSP旅行商模板题
Problem: 有n个城市,John从第一个城市出发,最终回到第一个城市,每个城市只经过一次,求最小代价?原创 2017-02-10 11:43:49 · 612 阅读 · 0 评论 -
hdu 2224 The shortest path 单向旅行商问题
Problem:有n个节点,一个人去访问这n个节点,要从最左边的节点开始,经过这n个节点后再返回源点,在达到最右边之前只能向右走,同理回来时只能向左走,同一个节点只能经过一次,问最短路是多少?原创 2016-08-06 11:54:25 · 712 阅读 · 0 评论 -
POJ 1947 Rebuilding Roads 树状dp+背包
Problem: 给一棵树,问最少砍多少刀就可以划分出来一个p个节点的子树。原创 2017-02-07 16:02:58 · 329 阅读 · 0 评论 -
HDU 3593 The most powerful force 树状dp
Problem: 有很多的士兵需要出征,如果士兵出征那他的上级也必须出征,如果一个士兵的上级是自己,那么说明自己就是老大,最多不超过500个老大,每个士兵有两个属性,需要花费的钱和能贡献的价值,给定允许消费的最大的钱,问最多的贡献是多少?原创 2017-02-06 13:45:16 · 461 阅读 · 0 评论 -
0-1背包 多阶段决策
1. 根据输入的每一个物品,来判断影响的每一个状态,2. 状态是分阶段的,阶段就是每一个物品,和每一个状态。原创 2016-08-07 01:46:52 · 474 阅读 · 0 评论 -
uva1412 基金管理
1. 复杂状态做映射。2. 分阶段对每种情况的每种决策做遍历。3. 刷表要好的初始化。4. double数组不能用memset。5. 递归输出可以利用保存的之前下标并从前到后。原创 2016-08-06 11:56:50 · 1372 阅读 · 0 评论 -
uva1347 旅行 不回头旅行商
1. 多路径同起步。2. 找到解决问题的办法后再找合适的状态和决策,然后状态转换。3. 不回头,所以可以依次状态转换,若可以回头,则转变为旅行商问题。原创 2016-08-06 11:56:04 · 756 阅读 · 1 评论 -
uva1252 20个问题
1. 遇到集合个数太多的情况想办法转换表达方式,再用数组存储,相当于用状态做一个映射。2. 需要得到第几个的时候就不太好s++这样枚举,适合多次枚举第几个数,再判断是否曾经枚举过。3. 分阶段的思想运用时如果需要利用阶段的状态,则更适合利用二进制枚举状态,以方便状态的表示,递归i>>i+1这种不方便表示。4. 根据题意注意题目中什么时候要用max,什么时候要用min。5. 多次枚举每一位可以得到结果,原创 2016-08-06 11:55:35 · 1312 阅读 · 0 评论 -
UVA1025 固定终点二维dp
1. 状态,决策,转换。2. 遍历每一个状态并记忆化搜索。3. 复杂度为 状态*决策。4. 递推过程找好大层次,比如这道题的时间,可以利用上一层的结果。5. 固定终点问题常以到终点的值为主状态。原创 2016-08-06 11:55:30 · 454 阅读 · 0 评论 -
uva1625 颜色的长度
1. 另一个递推模板,遍历完上一层,然后下一层就可以利用i-1或者j-1.2. 两个队列的类似最长公共子序列问题常定义状态为,分别移动了多少个元素。3. 复杂代价预处理,然后状态转换时直接调用。4. 滚动数组可以利用多层来表示相邻层次关系,利用t^=1 来进行0和1的状态转换。原创 2016-08-05 01:00:19 · 811 阅读 · 0 评论 -
uva1626 括号序列
1. 状态转移可以分情况讨论,注意特殊情况。2. 利用j-i递推,利用了递推模板,边界需要处理的提前初始化。3. scanf不读入\n等符号,如果要读入空串需要用fgets或者getchar。4. 递推时,i递减,j从i开始递增,取k做中间标,保证了按照j-i的规律递增,每一次的值都可以利用上一次的值。原创 2016-08-05 00:59:19 · 873 阅读 · 0 评论 -
uva10003 切木棍 线性区间dp
1. 线性dp,区间思想。2. 动态转移方程:区间代价+此次的代价。3. 下标i,j指的是切割点而不是每一个点。4. 此次代价在底层可以直接返回结果。5. 利用了标准的记忆化搜索模板,如果存在则返回。原创 2016-08-05 00:58:05 · 1147 阅读 · 0 评论 -
uva11584 划分成回文串 线性dp
1. 状态转移时,常常需要遍历之前的每一种情况来看哪一种情况是最优,比如跳过哪一个串。2. 判断回文串可以从中心位置开始遍历,预处理往往会加快时间。原创 2016-08-05 00:38:25 · 443 阅读 · 0 评论 -
HDU 1054 Strategic Game 树形DP
Problem: 给了一棵树,所有的边都需要士兵看守,士兵在节点上,结点上的士兵可以看守与他相邻的路,问这棵树最少需要多少士兵。原创 2017-01-27 17:37:06 · 400 阅读 · 0 评论