
动态规划——杂
文章平均质量分 72
dumeichen
这个作者很懒,什么都没留下…
展开
-
poj 1322 dp(马尔可夫链)
题意:一个包里有无穷多个巧克力,巧克力有c种颜色,每次从包里拿出不同颜色巧克力的概率都是相等的,桌面的巧克力不允许颜色相同,若某次拿出的巧克力与桌上的巧克力颜色相同了,则将两颗巧克力都吃掉。计算进行n次拿巧克力的操作后,桌上有m颗巧克力的概率,输出结果精确到小数点后三位。思路:原创 2014-08-26 21:28:01 · 594 阅读 · 0 评论 -
poj 2229 dp(分解为2的幂)
题意:问把一个整数分成若干2的幂之和有多少种分解方法?思路:如果i为奇数,肯定至少有一个1。那么dp[i]=dp[i-1],构造方法为把i-1的每种分解加上一个1。如果i为偶数,如果有1,至少有两个,则f[i-2]的每一种情况加两个1,就得到i ;如果没有1,那么与i/2的分解方法数相同,构造方法为把分解式中的每一项除2。所以有:f[i]=f[i-2]+f[i/2]。一开始用递归式原创 2015-08-17 10:19:00 · 338 阅读 · 0 评论 -
poj 1141 dp(补成最短的规范字符串)
题意:给定一个由'(' , ')' , '[' , ']'四个字符组成的字符串s,求一个最短的合乎括号规范的字符串t,使得s是t的子序列。合乎规范的串的定义是:1. 空串。 2. 若S合乎规范, 那么(S) 和[S] 都合乎规范。3. 如果A 和 B 都合乎规范,那么AB 合乎规范。Sample Input([(]Sample Output()[()]思路:采用动态规划原创 2015-08-17 17:41:52 · 392 阅读 · 0 评论 -
poj 3252 数位dp(Round Number)
题意:输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少个Round number。所谓的Round Number就是把一个十进制数转换为一个无符号二进制数,若该二进制数中0的个数大于等于1的个数,则它就是一个Round Number。思路:用dp来做:dp[i][j]表示二进制长度为 i 的数字含 j 个0的个数,比如dp[3][1] = 2(101和110)。做法就是先打表求出d原创 2015-09-07 16:40:44 · 343 阅读 · 0 评论 -
poj 3612 dp
题意:有一列树,总共有n(n思路:一个n*h*h的dp很容易想到,即dp[i][j]=min(dp[i][k]+abs(j-k)+(j-s[i])^2) ,dp[i][j]表示考虑前i棵树,第i棵高度为j的最小代价。但是要优化:把前面的转移方程变形,把涉及到k和不涉及k的分开,所以写成:1、j>=k : dp[i][j] = min(dp[i-1][k] -k*c) + (j-s[i])^原创 2015-09-03 10:18:57 · 431 阅读 · 0 评论 -
poj 2228 循环dp(睡觉最大值)
题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你获得的收益是w[a+1]+w[a+2]+……+w[b],而这头牛可以每天多次睡(可以理解成选若干个时间段睡觉),不过每天的睡觉总时间数不能超过B,求能获得的最大总收益。(不过值得注意的是,“1天”并不是从0~N-1,而可以是从任何一个小时开始到n小时之后,即可以从N-原创 2015-09-15 16:53:30 · 396 阅读 · 0 评论 -
poj 3272 图上dp(经过某边的最大路径数量)
题意:给定一个有向无环图,其中具有n个点和m条边。已知出度为0的点只有n点。从所有入度为0的点出发到达n,问所有可能路径中,经过某条路的最大次数是多少。题解:按照拓扑排序的顺序正向走一遍,记录到达某点的路径总数dp数组;从n出发反向走一遍,记录某点出发到终点的总情况数num数组。第二遍扫的时候枚举每条边,求该边对应两点所记录的两个信息之积的最大值。#include #include #原创 2015-10-19 23:34:16 · 453 阅读 · 0 评论 -
poj 3171 dp+线段树(最小代价覆盖全部区间)
题意:给定一个需要覆盖的区间[m,e],给出n个区间[ai,bi],每个区间有一个权值wi。求能够把[m,e]覆盖所选取的区间的最小代价之和。思路:如果没有权值,那么贪心可以解决这个问题,见poj2376。但是此处带权,那么贪心不成立,需要考虑用动态规划。先将所有区间的代价设置为无限大,然后将给的n区间按左优先排序,然后进行一趟遍历:第i个区间为[a,b],先查询[a-1,b-1]区间的最小值原创 2015-09-17 11:57:16 · 651 阅读 · 0 评论 -
poj 1088/2111 滑雪(经典dp/字典序输出)
题意:一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。输入的第一行表示区域的行数R和列数C(1 思路:动态规划。正向递推和递归(记忆化搜索)方式都可以。用递推时注意需要将高度排序。需要注意一个细节,如果一个位置比它四周的位置都低,那么它的高度为1,而不是0.递推:#include #include #include #include #include #inc原创 2015-07-21 20:37:01 · 562 阅读 · 0 评论 -
poj 1946 dp(公牛跑圈)
题意:一个团队有n只奶牛进行骑自行车环跑,如果一分钟跑x圈,领跑的消耗x * x体力,而后面跟跑的消耗x体力。没有体力的牛可以退场,有一头牛通过重点即算完成比赛。给定N, E, D三个数,表示有N头奶牛,每头奶牛具有初始能量值E,D表示需要环跑的圈数。问奶牛能否完成环跑,如果不能,输出0,否则,输出环跑的最短时间。思路:dp。显然每头牛轮流领跑,没体力了就退。dp[i][j][k] 表示第i头原创 2015-10-07 17:49:25 · 412 阅读 · 0 评论 -
poj 2018 斜率优化(最大平均值问题)
题意:给出一个序列,长度为n(n思路:就这道题来说采用斜率优化和dp没什么关系了,主要就是数形结合,相当于斜率对于枚举的优化。参考了周源的论文,文章讲述的非常清晰。首先i~j区间的平均值转换为sum(j)-sum(i-1)/j-(i-1),即转换为两点的斜率,于是问题转化为:平面上已知N+1个点,Pi(i, Si),0≤i≤N,求横向距离大于等于F的任意两点连线的最大斜率。接下来规定枚举方原创 2015-10-08 20:06:39 · 934 阅读 · 0 评论 -
Fibonacci前缀子串个数
题意:(http://hihocoder.com/problemset/problem/1239)给定一个序列,问该序列中蕴含的fibonacci前缀子序列有多少个。如长度为4的序列1122,答案为5,分别为1、1、11、112、112。题目保证输入中的每个数不大于100000.思路:先构造不大于100000的fibonacci序列,并且将数字之于下标hash一下。dp[i]表示第i个fibo原创 2016-04-05 19:33:58 · 1099 阅读 · 0 评论 -
hdu 2089 数位dp
题意:给定一个区间[n,m],问在其中的不包含数字4,且不包含连续的62的数字有多少个?思路:典型的数位dp。dp[i,j]表示开头为j的i位数中满足要求的数量。求和的时候先解析出数字,然后从高位往低位求和。#include #include #include #include #define clr(s,t) memset(s,t,sizeof(s));using namesp原创 2016-05-17 11:24:46 · 416 阅读 · 0 评论 -
poj 3311 dp求解TSP
题意:一个开披萨店的要把披萨所购所有购买者。一直pid原创 2014-09-27 20:10:06 · 625 阅读 · 0 评论 -
2017微软秋季校园招聘在线编程笔试
2017微软秋季校园招聘在线编程笔试前三题题解原创 2016-10-11 10:41:43 · 1490 阅读 · 0 评论 -
Google APAC Test 2017 Round D
帮同学做的,这几道题质量还是很高的。Problem A. VoteA and B are the only two candidates competing in a certain election. We know from polls that exactly N voters support A, and exactly M voters support B. We also原创 2016-10-25 09:43:33 · 1184 阅读 · 0 评论 -
poj 1037 dp+排列计数(美妙的栅栏)
题意:N 个木棒, 长度分别为1, 2, ..., N。构成美妙的栅栏。要求满足:除了两端的木棒外,每一跟木棒,要么比它左右的两根都长,要么比它左右的两根都短。即木棒呈现波浪状分布,这一根比上一根长了,那下一根就比这一根短,或反过来。符合上述条件的栅栏建法有很多种,对于满足条件的所有栅栏, 按照字典序(从左到右, 从低到高) 排序。问给定一个栅栏的排序号,请输出对应的栅栏方案, 即每一个木棒的长度原创 2015-07-23 09:51:57 · 1233 阅读 · 0 评论 -
poj 2373 dp(灌溉草场)
题意:在一片草场上:有一条长度为L (1 John要在这条线段上安装喷水头灌溉草场。每个喷水头的喷洒半径可以随 意调节,调节范围是 [A,B ](1 线段上的每个整点恰好位于一个喷水头的喷洒范围内 每头奶牛的活动范围要位于一个喷水头的喷洒范围内 任何喷水头的喷洒范围不可越过线段的两端(左端是0,右端是L )请问, John 最少需要安装多少个喷水头。思路(参考郭炜老师课件):从线段原创 2015-07-22 10:52:53 · 1037 阅读 · 0 评论 -
poj 3494 dp(最大全1子矩阵)
题意:给定一个n*m大小的0-1矩阵,原创 2014-09-05 20:35:38 · 685 阅读 · 0 评论 -
poj 2559 dp(柱状图的最大面积)
题意:给定从左到右的一系列矩形的原创 2014-09-05 21:10:01 · 550 阅读 · 0 评论 -
poj 1695 dp(三辆汽车运送杂志)
题意:给定n个城市,用1~n表示。有3辆车,开始都在点1上,要用这些车把杂志运送到各个城市里,当一个车在转移时,其他两辆车静止,并且两辆车不能跑到同一个位置,分配还得遵循递增的顺序,即城市i有了杂志后,车才能开到i+1城市送杂志。要求所有城市都送到杂志,汽车做过的路程和花费最小。思路:动态规划。dp[i][j][k]分别表示3辆车所在城市i,j,k时所花费的最小时间。因为城市要按照城市标号递增原创 2015-01-29 21:47:12 · 556 阅读 · 0 评论 -
poj 1608 dp(Banal Ticket)
题意:给定一个长度为2n的串,每个字符或者是数字,或者是?。?的位置也应该是一个字符表示相应的数字,但是看不清了。问把?还原成数字,使得前n个数字的乘积等于后n个数字的乘积的还原方法有多少种,不等于的又有多少种?输入:2 2??3输出:4 96 样例解释:两个问号填数字能符合的四种是:2003、2323、2643、2963。思路:做过的最难的一道dp,同学讲给我原创 2015-04-14 14:15:03 · 971 阅读 · 1 评论 -
隐马尔科夫模型
隐马尔科夫模型的概念以及最常见的两个问题。原创 2014-10-22 20:10:28 · 716 阅读 · 0 评论 -
算法设计第6章20题 完全背包变形
题意:n门考试,共H小时复习,每门考试分配h原创 2014-11-19 10:11:18 · 457 阅读 · 0 评论 -
poj 1625 AC自动机+动归+大数加法
题意:给出一个字符集V和P个模式串(长度小于10),问由这个字符集中字符组成的长度为N的且不包含任意一个模式串的字符串有多少个?(字符集大小,N思路:先将P个模式串建立AC自动机,标记好危险节点(flag数组)。然后动归来求:dp[i][j]表示长度为i且最后在节点j的字符串个数(节点j必为安全节点),初始dp[0][1] = 1, 其他dp[i][j] = 0。由dp[i][j] 可以导出,原创 2015-07-29 11:05:15 · 374 阅读 · 0 评论 -
poj 3691 AC自动机+dp(修复DNA使其不带病毒)
题意:给定不超过50个由 ‘A’, ‘G’ , ‘C‘ ,’T’。 四个字母组成的模式串,每个模式串长度不超过 20,再给一个不超过1000个字符长的同样由上述字母组成的母串S, 问在S中至少要修改多 少个字符,才能使其不包含任何模式串。思路:对模式串建立AC自动机。然后在其上进行动态规划。Ans[i][j]表示若要用长度为i的母串的前缀遍历DFA树, 使之达到节点 j ,至少要修改的字符数量原创 2015-07-29 22:20:09 · 525 阅读 · 0 评论 -
poj 2677 dp(双调巡游)
题意:双调巡游(bitonic tours)旅行商问题(算法导论中文第三版15-3题)思路:dp。对巡游线路的两个部分分别维护可能的最优解。dp[i][j]代表走的快的人到达j,走的慢的人到达i时的最小距离。怎么得到dp[i][j]呢,这要分情况。如果i#include #include #include #include using namespace std;#def原创 2015-04-11 14:07:14 · 1130 阅读 · 1 评论 -
poj 1505 dp(数列分段,最大段和最小)
题意:给出一个有n个数的数列,要求把这n个数分成m段,不能改变原数列的顺序。每段至少一个数。求使得加和最大的那段的和最小的划分方案。如果有多组解的话先要保证第一段和尽量小,若仍有多组解,要先保证第二段和尽量小,以此类推。思路:dp。dp[i][j]表示将前j个数分成i段的段和最大的最小值。一开始dp过程中记录路径然后输出,结果wa。分析原因在于输出不符合题意,比如数据:5 31 1 1原创 2015-04-07 16:45:01 · 1290 阅读 · 0 评论 -
poj 1923 dp(Fourier's Lines)
题意:给定两个正整数n和m,问n条直线交于m个点最多能把平面分成多少部分。要求不会多于两条直线交于一点。思路:dp。知道是dp可是自己还是在一个地方卡住了,忍不住搜了题解发现也比较好理解。#include #include int dp[105][10005];int n,m,c=1;int out(int y,int x){ return yx*(x-1)/2) || (原创 2015-03-31 23:42:21 · 732 阅读 · 0 评论 -
poj 3017 dp+单调队列(拆分序列)
题意:给定一个有n个数字的序列,现要将此序列分成几段,使得每段数字的和不大于给定的数字m。并且求使得各段和的最大值最小。思路:一个n^2的dp比较容易想到。令f[i] 表示前i个数按照题目要求的最小的和,则必然有f[i] = min(f[j] + max(a[j +1 , a[j + 2].....a[i])) ,其中j<= i,j的位置还得满足题目中m的限制。由于a数组都是大于0的,所以可以原创 2015-03-15 23:25:55 · 520 阅读 · 0 评论 -
poj 1239 dp(拆分成Increasing Sequences )
题意:给定一个长度不大于80的数字串,要求对数字串用逗号隔开,使得每个子串表示的数字保证是严格单调递增,且保证分隔后,最后的那个数字最小。当多种情况的最后一个串表示的数相同时,取分隔后的第一个数字最大的,要是第一个数字也相同,那么看分隔后的第二个数字,如此下去,数字前面可以出现0,即000001表示1。思路:从前往后一个dp求出最后一个数字最小时是多少,这个dp比较好理解,dp[i]表示str原创 2015-04-06 17:22:38 · 496 阅读 · 0 评论 -
poj 1837 背包(让天平平衡的方法)
题意:有一个天平,天平左右两边各有若干个钩子,总共有C个钩子,有G个钩码,求将钩码全部挂到钩子上使天平平衡的方法的总数。思路:(http://blog.youkuaiyun.com/lyy289065406/article/details/6648094/写的非常详细)首先定义一个平衡度j的概念当平衡度j=0时,说明天枰达到平衡,j>0,说明天枰倾向右边(x轴右半轴),j那么此时可以把平衡度j看做原创 2015-03-16 22:42:10 · 747 阅读 · 0 评论 -
poj 1496(1850)/2245 全组合打表或者数位dp(一种字符编码/Lotto)
题意:一直a -> 1;b -> 2;z -> 26;ab -> 27;ac -> 28;az -> 51;bc -> 52;vwxyz -> 83681原创 2014-08-23 18:28:46 · 542 阅读 · 0 评论