动态规划
humeay
这个作者很懒,什么都没留下…
展开
-
HDU 5656 CA Loves GCD
题意: 问题描述CA喜欢是一个热爱党和人民的优秀同♂志,所以他也非常喜欢GCD(请在输入法中输入GCD得到CA喜欢GCD的原因)。现在他有N个不同的数,每次他会从中选出若干个(至少一个数),求出所有数的GCD然后放回去。为了使自己不会无聊,CA会把每种不同的选法都选一遍,CA想知道他得到的所有GCD的和是多少。我们认为两种选法不同,当且仅当有一个数在其中一种选法中被选中了,而在另外一种选法中原创 2016-04-03 17:24:00 · 366 阅读 · 0 评论 -
概率DP合集
http://www.bnuoj.com/v3/contest_show.php?cid=7521#problem/D 根据kuangbin的概率DP集合刷的 Orz 感谢kuangbin巨巨 http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html 上边的blog已经总结的很好了…B.POJ 2096 Collecting原创 2016-02-03 23:34:27 · 504 阅读 · 0 评论 -
POJ 2096 Collecting Bugs(概率DP)
题意:一个人要找BUG,现在有n个种类,s个子系统。每个BUG有两个属性,一个是每个BUG属于一个子系统和一个分类,问发现n种BUG并且每个子系统都有BUG的平均天数 思路: 期望==概率*值 所以只需要求出所有情况的概率就行了 dp[i][j]代表已经发现了i个种类和j个子系统的BUG 现在有四种情况 1.发现的BUG是属于之前的种类并且属于之前的子系统 2.发现的BUG是属于之前的原创 2016-02-03 23:16:26 · 211 阅读 · 0 评论 -
CF 149 D Coloring Brackets(区间DP)
自己想不到怎么区间DP。。。 后来看的别人的…. 就是统计dp[l][r][i][j] l~r区间里边l涂i色,r涂j色的方法个数 这篇说的很详细了 ORZ http://blog.csdn.net/sdjzping/article/details/19160013#include<stdio.h>#include<string.h>#include<iostream>#include<原创 2015-12-14 19:42:25 · 274 阅读 · 0 评论 -
nyoj 746整数划分(四) 区间DP
寒假玩了十天了已经…(好罪恶 今天开始刷题吧…. dp[i][j]代表从1~i插入j个乘号能达到的最大值 例如找到1~i时要插入j个括号 这时我们应该在1~i中间找到一个乘法的前驱1~k和1~k经过j-1次乘法的最大值 结果为1~k经过j-1次乘法后的最大值*k~i的数值#include<stdio.h>#include<string.h>#include<iostream>#inc原创 2016-01-19 15:29:03 · 636 阅读 · 0 评论 -
POJ2955:Brackets(区间DP)
题意:给你一段括号序列,括号有两种(,)和[,] (), [], (()), ()[], ()[()] 这种括号算全部匹配的 (, ], )(, ([)], ([(] 这种就是不完全匹配的 比如说([)] 匹配个数就是1 求最多是多少个括号匹配 记忆化搜索的方式好写得多,但是速度比较慢,因为一个dp[i][j]会被调用多次i dp[l][r]代表l~r最多的括号匹配个数 这里我原创 2016-01-26 03:31:38 · 251 阅读 · 0 评论 -
POJ1651:Multiplication Puzzle(区间DP)
http://poj.org/problem?id=1651 题意:给你一段数字序列,每次拿出来一个数(除了第一个和最后一个),然后ans+=这个数 * 左边的第一个数 * 右边的第一个数,取出除了第一个和最后一个之外的所有的数后,求最小的ans 这里只写了记忆化搜索的版本…. 其实只用加一个枚举中界的循环就OK了 dp[l][r]代表的是以l为第一个数,r为最后一个数的子序列得到的最小的原创 2016-01-26 03:43:51 · 213 阅读 · 0 评论 -
zoj 3469 Food Delivery (区间DP)
题意:你是一个餐馆的送餐员,现在要送n个人的餐。坐标是一维的,餐馆的坐标为x,你的速度为v^-1。 每个送餐的人有一个坐标Xi和一个不开心值Wi,如果这个人餐是第K时间送到的,这个人的不开心值就是K*Wi。求一个最小的不开心值和。 思路:一开始看到以为是贪心….然后就…呵呵.. 考虑这是一个一维坐标,所以比如说1 2 3 X 4 5 6 这是坐标的相对位置 餐馆在X 考虑最小方案 送餐员原创 2016-01-27 15:35:02 · 311 阅读 · 0 评论 -
HDU4283:You Are the One(区间DP)
题意:有个舞台要表演节目,有n个人排成一队,每个人有个屌丝值的单位Pi。如果这个人前边有x个人上台了,这个人的屌丝值就是x*Pi。队列的顺序是固定的,但是舞台有个小黑屋(类似栈),宽度只能容下一个人,长度是无限的,在上台之前可以先进小黑屋然后让别人先上。求让所有人都上台的最小的屌丝值和 思路: 在我感觉,区间DP就是找到一个点,让区间分离而且又能合并的点,像这道题。就可以这么考虑。 比如 1原创 2016-01-28 17:17:01 · 267 阅读 · 0 评论 -
HDU 3555 Bomb(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 过年了…好懒…坎坷的回家….拜年…走亲戚…balabala…..玩了几天…然后..为了不影响进度….把插头DP跳过去了…(好懒…. 第一道数位DP 感觉这个数位DP就是找到每一个数位的状态的个数,然后通过遍历这个数来找到题目需要的状态的答案 题意:给一个n,输出1~n里含有 49子序列的数的数量原创 2016-02-10 20:28:26 · 292 阅读 · 0 评论 -
POJ 3252 Round Numbers(数位DP)
题意:给一个区间[L,R],问在这个区间里有多少个数转化成二进制后0的个数>=1的个数 思路: 跟其他的数位DP有一点点不同 dp[i][j] 表示的是i位里有j个1有多少种情况 下面的数都是二进制的 以10110为例子 先统计0~1111的个数 然后从高位到低位统计 第一次遇到1时,就是把数看作10100,统计10000~10011的个数 然后第二次遇到1时,把数看作10110,原创 2016-02-12 18:02:18 · 211 阅读 · 0 评论 -
HDU 2089 不要62(数位DP)
跟这一篇差不多 http://blog.csdn.net/qq_27925701/article/details/50650199#include<map>#include<set>#include<queue>#include<stack>#include<math.h>#include<string>#include<vector>#include<stdio.h>#includ原创 2016-02-12 18:04:09 · 274 阅读 · 0 评论 -
UESTC 250 windy数 (数位DP)
http://acm.uestc.edu.cn/#/problem/show/250 题意:中文题…#include<map>#include<set>#include<queue>#include<stack>#include<math.h>#include<string>#include<vector>#include<stdio.h>#include<string.h>#i原创 2016-02-12 18:07:39 · 365 阅读 · 0 评论 -
HDU 4507 吉哥系列故事——恨7不成妻(数位DP)
这道题是开始看的kuangbin巨巨的BLOG,但是感觉看不懂….所以找了其他blog很久才略懂一些 题意:中文题… 思路: 这里我们举个例子是L=111,R=113,恩 解释一下最后一个式子,就是求平方和的 答案就是111^2+112^2+113^2,然后我们枚举每一位的话,我们要把一个数拆开 比如113这个数,我们dfs完了后边的13,我们看回到100的时候怎么处理 就是100+1原创 2016-02-20 01:47:23 · 304 阅读 · 0 评论 -
POJ 2288 Islands and Bridge 状压DP
题意:有n(n<=13)座小岛,有个人要旅游全部的小岛,每个岛有权值,设当前走到的岛的权值为c,上个岛为b,上上个岛为a,那么ans+=c+c*b+a*b*c(如果当前岛和上上岛连通) 思路: 先枚举一下边界条件,然后就是正常的跑状态,一定要注意状态是从小跑到大的,所以我们此时的状态只能用到比自己的状态小的状态 n==1的时候要特判#include<stdio.h>#include<stri原创 2016-02-21 16:57:36 · 302 阅读 · 0 评论 -
hdu 3001 Travelling 状压dp
题意:给一张城市地图,可以以任何城市为起点,求走完所有城市的最小费用,所有城市最多走过两遍。 思路:因为我们要控制经过城市次数,所以用三进制表示,注意有重边。 dp[i][j]代表i状态时我们在j城市的最小费用 当我们要从j城市走到k城市的时候,要判断k城市的访问次数,然后就很容易转移 dp[i+ck[k]][k]=min(dp[i][j]+Map[j][k],dp[i+ck[k]][k])原创 2016-02-20 22:33:55 · 380 阅读 · 0 评论 -
POJ 1185 炮兵阵地 (状压dp)
题意:中文题… 思路: 先预处理不会互相攻击的状态,然后就是枚举这一行,前一行,前两行 有一点就是dp必须保存上次的状态,要不然得到的状态会比真实状态要多#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<sta原创 2016-02-20 17:05:42 · 301 阅读 · 0 评论 -
矩阵基础1010 UVA 11651 矩阵快速幂+DP 好题,推荐
题意: 问你分数为score的base进制的数有多少种 这个数必须满足相邻的数不相同而且没有前导零 分数是相邻的数的差的平方的和 思路: dp[i][j]是分数为i时,以j结尾的数的个数 然后我们发现 每个dp[i][j]只被dp[(i-(base)*(base))~(i-1)][0~base-1]影响 我们就把这个区间里的数全部弄进矩阵里,就可以加速计算 时间复杂度大概是 O原创 2016-07-27 18:24:46 · 356 阅读 · 0 评论 -
HDU 5293 Tree chain problem dfs序+树形dp
题意: 在树上给出一些链,链上有权值 求一个最大的链集合的权值和,集合内的链不相交 思路: 把每条链的状态放到lca(u,v)上,然后进行树形dp dp[u]有两种状态 1.不取链 dp[u]=∑dp[Son[u]] 2.取一个lca(x,y)==u的链加上 因为要取这条链,所以我们应该减掉子树上取了相交的链多加的值 因为点有点多,而且对于链操作 很容易想到dfs序或者树剖(原创 2016-09-13 16:30:02 · 318 阅读 · 0 评论