![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
动态规划
文章平均质量分 72
动态规划
RocSin
这个作者很懒,什么都没留下…
展开
-
UVa 674 - Coin Change 动态规划入门
/*** 刚开始做dp题,不习惯啊。看人代码还理解了老半天。。* 动态规划 入门题* 一直在想dp[i][j]是什么意思。。其实为了避免重复的选取,也就是分钱。* 目标num,可以按时间阶段选取,比如第一次选取coins[0](也就是1) 那总数num就应该减一,即num-coins[0]* 这样循环下令j从0-4,也就是5种硬币都要选取,这样就不会遗漏也不会重复了。* 所原创 2013-05-04 11:13:49 · 1651 阅读 · 0 评论 -
HDU 2089 数位dp (简单)
/*** 数位DP:* 和HDU 3555类似,稍微复杂了点点,不同在于,* 一、多考虑4的情况* 二、因为子串是“62” 而3555的子串“49” 末尾数字不同* 所以这题要多加一种情况if(num[i] > 2 && last == 6) //last 表示前一位数num[i+1]* 状态还是一样:* dp[i][0] 表示所有不含不吉利的数开头任意原创 2014-01-14 12:11:35 · 823 阅读 · 0 评论 -
HDU 3555 数位DP 入门
/*** 数位dp:* 和hdu 2089 类似,不过这个其实更简单。* 不过有一点不同的是,在计数的时候,因为要找的是子串“49”,* 所以不需要考虑在if(num[i] > 9 && last == 4) 的情况* 而hdu 2089的子串是“62”,也就是当在if(num[i] > 2 && last == 6)情况的时候* 仍需考虑num[i] >原创 2014-01-14 12:10:22 · 640 阅读 · 0 评论 -
ural 1057 Amount of degrees 数位DP (入门)
/*** 数位dp:* 第一道数位dp题,还是看《浅谈数位类统计问题》看到的题,* 关于数位dp的理解,理解那棵完全二叉树就很容易理解了。* 关键是对于非二进制的计数是如何根据二进制得出来的dp去计算的,、* 拿5进制来说,比如 40132, bit[5] = {4,0,1,3,2} * bit[len-1] = 4, 实现的时候逆序遍历: i =原创 2014-01-11 10:45:59 · 777 阅读 · 0 评论 -
POJ 1141 Brackets Sequence (DP+路径处理)
/*** 挺不错的DP题,黑书dp专题第一例。* 输出搞了近一个小时的输出,结果发现不是输出的问题,* 是在处理pos和dp数组的时候更新dp用的是dp[.]=min(dp[.],dp[..])的形式。* 忽略了pos[i][j]的更新应该在满足dp[..] < dp[.]的时候才更新的* 所以建议还是少用min去更新,避免遗漏还是if(dp[.]>dp[..原创 2013-09-30 22:30:33 · 713 阅读 · 0 评论 -
HDOJ 2955 Robberies 简单01背包+简单概率思想
/*** 与其说这题考背包,不如说考概率。* 比较容易想到的是,把被抓到的概率乘100,加卡精度来做背包容量,钱就做背包价值* 可是不行! 这精度卡不了诶。。还是wa* 换种想法,题目给出的被抓的概率p,那(1-p)就是不被抓的概率。* 然而,让dp[i]表示抢到i百万的逃跑成功率。 那么如何计算?* 如果要抢到i百万需要抢n个银行,那么就是抢这原创 2013-09-13 23:32:59 · 891 阅读 · 0 评论 -
HDU 3339 In Action 最短路(dijkstra) + 裸01背包
/*** dijkstra + 01背包: A的有点吃力呐。。但至少没看题解吧* 一开始也是理解错题意了。 以为就是一辆坦克。经过station就行。还去记录了path,为了算power大于一半* 其实不是的,有足够辆坦克,一个坦克占领一个,必须是stop here。 占领其他station就要用其他坦克了* 其实也不难想。。用dijkstra求出单起始源到各原创 2013-08-15 23:24:36 · 654 阅读 · 0 评论 -
POJ 2063 Investment 完全背包
/*** 多重背包:* 这题很裸的多重背包。不过居然还各种RE和WA。。。* 首先是RE: 因为每次都会有利息,加上原来的本金之后的资金肯定是会大于原来的最大值。* 数组开大个5倍就够了。 因为题意是利息不超过10%,年数不超过40.这个随便算下,或者开个足够大就行。* 其次WA的原因:因为我在实现的时候,用了个变量extra去存不足1000的部分。而原创 2013-08-22 23:52:36 · 631 阅读 · 0 评论 -
UVa 10651 Pebble Solitaire 记忆化搜索+位运算
/*** 位运算+记忆化搜索:* 这题就当做是熟悉熟悉位运算,练练简单的记忆化搜索的。* 要是熟悉了位运算,这题其实很容易的。* 依题意: 一排有12个位置,这样用int去压缩也是很足够的。* 对于一个数的每个位, 0表示空,1表示有。* 然后遍历的时候三个三个去分析,然后dfs记忆化搜一下就行了。*/#include #原创 2013-07-31 10:12:08 · 815 阅读 · 0 评论 -
UVa 10051 Tower of Cubes DP 简单动态规划题
/*** 简单DP,不过要注意记录起始答案。* 思路: 这题有点像另外一个入门dp题(题意大概是):* 给你个三角形样式的各数,从最上面的顶点开始一直到最底层,* 选条路线使得该路线经过的数之和最大。* 其实这题也差不多,从最底层的方块先放好,然后一层一层往上,* 只不过这题有可能“断层”(也就是不选某个方块)* 现在dp过原创 2013-07-30 18:22:59 · 703 阅读 · 0 评论 -
UVa 10534 - Wavio Sequence DP+最长上升子序列(严格上升)+二分查找(nlogn)
最长上升子序列: http://acm.tzc.edu.cn/acmhome/topicListAction.do?method=topicDetail&id=52a13560222e8d9c012249d36cc10af1 /*** DP + 最长(严格)上升子序列 + 二分查找(nlogn):* STL中有两个很好用的函数,但是一定要理解清楚了,比如返回值,如何传参。才原创 2013-07-30 15:00:37 · 948 阅读 · 0 评论 -
UVa 10465 - Homer Simpson(背包&贪心)
/*** 这题第一思路就是贪心,还是因为dp题做的少。 这题也是很明显的完全背包问题* 不过对于这题贪心的效率更高吧。* 思路: 令 m > n , 枚举n的个数的所有可能 0 到 sizeOfN。* 因为这样枚举的话,能够使得先得到的一定比后得到的所选取的个数大。* 然后用一个数组remain[10001]存drink beer的时间的各种情况所能够吃的最多的汉堡数。*原创 2013-05-14 17:42:30 · 897 阅读 · 0 评论 -
UVa 825 Walking on the Safe Side (DP)
/*** dp题: * 状态转移方程都好写。 * 这题关键是审题!! 花了我几小时去debug,结果是输出的时候错了,* 不是没个case之后都要输出回车的, 只有相邻两个,诶。。。。*/ #include #include #include #include #include #define INF 0x7fffffff#define MAXS 101#d原创 2013-05-28 09:48:31 · 702 阅读 · 0 评论 -
UVa 10130 SuperSale 01背包问题 入门题
/*** dp经典题 01背包 入门:* 这题一开始题意理解错了,以为物品只能取一次,* 第一人取了的话,以后的人都不能再取了。 结果题意应该是:* 一个人只能去一个该种物品,而市场上有无数个该种,所以其实* 就是最简单的01背包题,最后答案就是把所有人的最优解相加求和。* * 还有就是这里一维数组(也就是白书上说的滚动数组)的应用,貌似也很常见,* 但原创 2013-05-12 22:22:33 · 661 阅读 · 0 评论 -
1163 The Triangle 动态规划
/*** 题意:不难理解吧。。从顶到底,找出一条路径,是的sum最大。** 动态规划入门吧,记忆化搜索。* 自底向上dp。* 用滚动数组,也就是一维数组记录即可* 最后输出dp[1]就行*/#include #include #include #include #include #define INF 0x7fffffff#define MAXS none原创 2013-05-22 17:19:07 · 622 阅读 · 0 评论 -
UVa 10404 - Bachet's Game 博弈+动态规划
/*** 博弈和dp结合* 首先有博弈论的一些基础:* 必胜点: 选手必胜的点,下一步要么停止,要么必然走到必败点。(因为都是以最优策略博弈的)* 必败点: 选手必败的店,下一步要么停止,要么必然走到必胜点。* 所以这题在结合下dp,题给出的数组是一次可以选取的可能情况,所以这些点都是* 必胜点,标记好必胜点后,再从2到num遍历一遍,假设现在选手在点i原创 2013-05-22 16:47:31 · 790 阅读 · 0 评论 -
POJ 2506 递归 + 高精度
这题一开始自己做的是用二维数组,结果发现传参弄的太乱了 。。 直接看人代码了,恍然大悟啊。。怎么就没想到用结构体数组诶…… 直接贴人代码了 递归加高精度。。 规律是算前几个发现的, 可是硬是从理论方面,不知道怎么得来的。。。知道的大神们求教下。。。 f(n) = 2 * f(n -2) + f(n - 1) //原创 2013-03-05 22:46:55 · 2149 阅读 · 1 评论 -
UVa 10474 - Where is the Marble
这题还是从《算法入门经典》上附的。 归类居然是回溯!!我就傻傻的按着回溯的思想,或者说第一印象,也就是第一个想到的就是排序后二分查找。结果悲剧TLE然后才想到可是在每次输入的时候就存到个数组里, 也就是hash思想吧。#include #include #include using namespace std;long hash[10005];long ans, N, q原创 2013-04-13 22:58:49 · 760 阅读 · 0 评论 -
UVa UVA 10891 Game of Sum (区间DP)
/*** 挺水的区间DP* dp[i][j] 表示该轮选手在还剩[i,j]的数中按规则选取所能得到的最大收益* 最大收益也就是相对于当前选手最优决策后在区间[i,j]中使得两选手的差值最大。* 这样dp[1][n]其实就是所要的答案。* 如何求dp[1][n],其实就是个区间dp,从小范围算起到最后1-n范围。* 再用个sum[n]数组记录前n项和,方原创 2014-01-20 14:17:54 · 683 阅读 · 0 评论