100道动态规划
文章平均质量分 73
这里是蒟蒻在CCPC赛后说的要写的100道动态规划。。。
Good_night_Sion_
Good Night, Sion.
展开
-
有关于100动态规划专栏的说明
老实说起来确实是很久没有更新了,因为中间发生了一些事情......不过我发誓,无论是否退役,100道DP一定按质按量更完原创 2017-08-24 10:50:37 · 846 阅读 · 2 评论 -
我说过的,CCPC拿到铜,我就做100道动态规划
好吧,本来以为是拿不到牌子的。。。于是在比赛前放下豪言壮语“假如我们队伍拿到铜了,我就做100道动态规划!”结果没想到真的拿到了一个铜。。。好吧,自己说过的话不能反悔。。。老老实实做100道动态规划,而且不是水题,此贴为证。 PS:这个比赛是2016CCPC合肥原创 2016-10-17 22:03:08 · 1356 阅读 · 9 评论 -
100道动态规划——42 CodeForces 908D New Year and Original Order 概率DP
Good Bye 2017!概率DP真心不会做......题意是给出一个k,一个pa和一个pb一开始当前串是一个空串,每一次操作都有pa/(pa+pb)的概率向当前串附加一个字符'a',pb/(oa+pb)的概率附加一个字符b,当考虑当前串的子序列,当出现大于等于k个子序列'ab'的时候,就停止,询问这时候子序列中'ab'的期望出现次数。定义状态dp[i][j]表示原创 2018-01-03 20:45:30 · 1029 阅读 · 0 评论 -
100道动态规划——41 CodeForces #419 815C Karen and Supermarket 树型DP
真的,,,好久都没有写过动态规划了呀....题意说的是对于n件物品,每一件物品都存在一个价格c和一张优惠券能够减免d元。对于第i件物品(i ≥ 2)使用优惠券时有额外的要求,那就是第xi张优惠券必须被使用,满足1一个比较显然的事情就是这些物品使用优惠券时构成了一棵依赖树,以1号物品为root节点,这是由1接下来这个问题需要被转化一下,不能直接求出给出d元金钱下的最多物品原创 2017-10-15 15:04:51 · 767 阅读 · 0 评论 -
100道动态规划——40 CSUOJ 1889 Copying DNA 记忆化搜索 DP的感觉
DescriptionEvolution is a seemingly random process which works in a way which resembles certain approaches we use to get approximate solutions to hard combinatorial problems. You are now to do somet原创 2017-04-28 21:44:41 · 1160 阅读 · 0 评论 -
100道动态规划——39 hihoCoder 1475 数组拆分 前缀和 DP
#1475 : 数组分拆Time Limit:10000msCase Time Limit:1000msMemory Limit:256MBDescription小Ho得到了一个数组作为他的新年礼物,他非常喜欢这个数组!在仔细研究了几天之后,小Ho成功的将这个数组拆成了若干段,并且每段的和都不为0!现在小Ho希望知道,这样的拆分方原创 2017-04-24 20:52:46 · 1087 阅读 · 2 评论 -
100道动态规划——38 HDU 5763 Another Meaning KMP + DP
Problem DescriptionAs is known to all, in many cases, a word has two meanings. Such as “hehe”, which not only means “hehe”, but also means “excuse me”. Today, ?? is chating with MeiZi online, Me原创 2017-04-24 15:14:20 · 608 阅读 · 0 评论 -
100道动态规划——37 UVA 1218 Perfect Service 树形DP 分析问题
树形DP 老实说一开始是考虑用点的个数减去最大独立集的点的个数,但是很快就发现不对,数据如下: 6 1 2 1 3 1 4 1 5 2 6 在这个例子中我们很显然的发现节点2有两台服务器与之相连,是不符合题意的 。。。然后就不会做了。原创 2017-04-19 16:52:40 · 771 阅读 · 0 评论 -
100道动态规划——36 UVA 1220 Party at Hali-Bula 树形DP 最大独立集 思考欠妥
题目的地址是:https://uva.onlinejudge.org/external/12/1220.pdf pdf不是很好放上来就只给出链接了 好吧,这道题目我觉得我应该是可以做出来的,但是在思考上出了问题,还是需要多做一些题目来提升感觉 首先比较显然的地方是,这道题目应该是说求一个树的最大独立集,然后在加上一点的就是求最大独立集是否是唯一原创 2017-04-19 14:22:06 · 695 阅读 · 0 评论 -
100道动态规划——35 CSUOJ 1846 Assembly Line 区间DP,增加状态
DescriptionThe last worker in a production line at the factory of Automated Composed Machinery is worried. She knows that her job hangs in the balance unless her productivity increases. Her work con原创 2017-03-25 23:17:52 · 794 阅读 · 0 评论 -
100道动态规划——34 UVA 10559 Blocks 状态的定义 状态转移方程
好吧,我想到的是枚举决策。。。 居然是个类似于区间DP的感觉。恩。。 定义状态dp[i][j][k]表示从i~j且原创 2017-03-10 15:07:31 · 1355 阅读 · 0 评论 -
100道动态规划——33 HDU 5602 Black Jack 博弈DP?以前没做过这个类型
做过博弈论的题,做过概率DP的题,可是没有见过这样的题目。。 要开两个数组进行记忆化搜索。 其实一部分原因也是因为题目没有描述清楚(误,其实是自己没有看清楚比大小的规则) 规则是首先是闲家叫牌,不断的叫牌,然后轮到庄家叫牌,不断的叫牌,当庄家不叫牌时,就开始比大小 不是在电视里看过的那种庄家闲家来回轮流的叫牌。。。。原创 2017-03-03 20:37:18 · 1953 阅读 · 0 评论 -
100道动态规划——32 UVA 12170 Easy Climb 通过分析减少状态数 单调队列
好吧,不会做 一开始想到的状态是定义dp[i][j]表示第i个数修改为j时的最小值,然后因为d范围过大就把这个想法否定掉了,然后就不会做了 否定的理由是①:数组开不下②:对于一个j要考虑[j-d,j+d]之间的数,状态太多了,状态总数显然是Ω(n*d)的 确实没有想到通过分析来减少状态的数量,而且是大大减少 首先来确定impo原创 2017-03-01 15:43:43 · 753 阅读 · 0 评论 -
100道动态规划——31 POJ 2411 && POJ 2663 && POJ 3420 状态压缩 矩阵快速幂
首先感谢原作者http://blog.csdn.net/shiwei408/article/details/8821853,这篇blog写的确实挺不错的 切入正题: 这三道问题具有相似性,于是我从简单的开始说起,POJ 2411 考虑大小为n×m的矩形 定义状态dp[i][s]代表当前处于第i行且第i行状态为s时的方案总数,每原创 2017-02-26 17:15:11 · 908 阅读 · 0 评论 -
100道动态规划——30 UVAlive 3907 Puzzle AC自动机上的动态规划,记忆化搜索
一开始确实没有想到怎么做。。 定义状态dp[i]表示自动机上的节点i还能够附加多长的字符,因此每一个串的结尾字符在自动机上对应的dp为0,这就是初始条件 状态转移方程就是dp[i]=max{dp[j]}+1,其中j表示i点可达的节点,最后的答案就是dp[root] 输出No的情况有两个,一个是在记忆化搜索的过程中,走到了一个已经访问过的节点了原创 2017-02-22 16:31:42 · 691 阅读 · 0 评论 -
100道动态规划——29 UVALive 5766 GRE Words AC自动机上的动态规划
之前怎么写都是WA,空了一天写还是WA,把cin和cout都换成scanf和printf就过,奇怪的问题 定义状态dp[i]表示选择第i个串的最大价值 状态转移方程就是 dp[i]=max{dp[j]}+value[i],其中要求0 因此问题就归结于高效判断子串的问题,这要求我们把每一个串都保存下来,当然,你记录每个点的father也行原创 2017-02-22 16:13:10 · 911 阅读 · 0 评论 -
100道动态规划——28 POJ 2778 DNA Sequence AC自动机+DP+矩阵快速幂 很不错嘛
一眼看出是AC自动机上的DP,因为数据量的问题显然不能记忆化搜索或者是递推,然后就不知道怎么做了 天知道还要联系到矩阵快速幂,图论的东西好久都没写过了=_= 定义一个Matrix的数据结构,也就是矩阵,由矩阵的长、宽、以及每个分量上的元素描述而成,支持通常意义上的矩阵乘法(在具体实现的时候用的是稀疏矩阵乘法),此外拥有一个成员函数qpow(int n),返回值为原创 2017-02-22 15:58:46 · 684 阅读 · 0 评论 -
100道动态规划——27 POJ 1185 炮兵阵地 状态压缩,预处理,滚动数组
不是很会状态压缩,学习一个 定义状态dp[row][i][j]表示当前考虑第row行,该行状态为i且上一行状态为j时可安放的最大炮兵数目 状态转移方程就是dp[row][i][j]=max(dp[row][i][j],dp[row-1][j][k]+num[i]),其中num[i]表示状态i的炮兵数 这样看起来也不是很难嘛,不过好久没有写过状态原创 2017-02-08 09:04:20 · 683 阅读 · 0 评论 -
100道动态规划——26 UVA 12099 The Bookcase 状态的定义,递推,背包
好题!这个题给我带来了很多思考 本来就不是很会做,看看了紫书才明白做法,这里权当自己复习一遍好了 首先给所有书规定一个顺序,把书按照书的高度由大到小排序,默认排序后第一本书放在第一层 定义状态dp[i][j][k]代表目前准备放第i+1本书,第二层的厚度为j,第三层的厚度为k时,第二层+第三层高度的最小值 于是就有3种状态的转原创 2017-02-04 15:47:07 · 886 阅读 · 0 评论 -
100道动态规划——25 UVA 1204 Fun Game 状态压缩 圆圈的处理 (100道完成了1/4啦)
首先说一说,100道完成了1/4啦,虽然是值得稍稍庆祝一下的事情.......可是,紫书上的DP快写完了。。。以后去白书上刷题,然后白书刷完了我也不知道去哪儿刷了。。。 说说这道题的想法,状态压缩。我发现以前在写状态压缩的总结的一条规律(数据上限小可以考虑状态压缩)并没有什么用。。。。首先要知道是一个DP呀,然后就算知道了是状态压缩也想不出来=_= 我觉得紫书上原创 2017-01-23 20:40:12 · 1213 阅读 · 0 评论 -
100道动态规划——24 UVA 1633 Dyslexic Gollum 状态压缩DP 挺好的题 因为窝没想到嘛
没做出来,看了http://blog.csdn.net/chy20142109/article/details/52266353 这里的做法之后模拟的一遍,当初就没有想到是状态压缩=_=,不过现在想一想觉得状态压缩是很有道理的,总之还是涨了姿势吧。 题目的意思很清楚,给定n和k,求出长度为n且最长回文子串的长度>1...... 先说说构造回文串的问题,构造长度为i的01回文串,原创 2017-01-19 22:08:18 · 1048 阅读 · 0 评论 -
100道动态规划——23 POJ 1015 Jury Compromise 恩,我也不知道怎么说这里的知识点
直接切入正题吧,我觉得这个题和我这里的http://blog.csdn.net/good_night_sion_/article/details/53426599第16道动态规划是类似的。我想的状态表示是dp[i][j][k]表示前i个人选了j个差为k的状态是不是可达,给每一个人记录编号,然后按照控方+辩方分数之和从小到大排序,最后找解的之后贪心优先选择后面的,好吧,在写完这句话的这一刻我就意原创 2017-01-14 21:19:25 · 1182 阅读 · 0 评论 -
100道动态规划——22 POJ 1661 帮助 Jimmy 记忆化搜索 状态定义 以及一个思维上的漏洞
好吧,这道题我交了第9次才A我觉得想到动态规划不是一件很难的事情.....我在状态的定义上犯了一个错误我一开始定义的状态是dp[i][j]表示坐标在i,j时的花费的最小时间,这就导致数组开不下,于是我就用了一个map来存然后记忆化搜索当然就是记录4个值了i,j,当前下落的高度,以及是从哪个方向走过来的就WA了4~5次....感觉这样行不通然后就看了题解,发现应该把状态定义为dp原创 2017-01-08 21:37:08 · 1060 阅读 · 0 评论 -
100道动态规划——21 HDU 1559 最大子矩阵和 树状数组 最大连续子区间和
好吧,拿一个简单的DP来练练手(捂脸)看到的第一眼就想到最大连续子区间和的问题,然后想办法往上面靠我用的不是二维树状数组,而是n个一维的树状数组,通过枚举子矩阵的行数,转化为最大连续子区间和估计是个n^3lgn的复杂度,算上树状数组的查询的话,因为数据量小,也就过去了。#include #include #include using namespace std;int原创 2017-01-08 11:40:01 · 1236 阅读 · 0 评论 -
100道动态规划——20 HDU 1257 最少拦截系统 LIS 啊!我为什么这个都没有想到!
。。。挺厉害的,我没有想到是LIS。。。看到以为要求总共有多少条最长不增子序列,然后不断的跑动态规划。。。还WA看到题解之后捶胸顿足,居然是一道LIS?,而且还是裸的LIS?!少年啊少年,你的洞察力还不够呀!#include #include #include using namespace std;int n,k;vector arr,dp;int main(){原创 2016-12-22 14:24:52 · 1279 阅读 · 0 评论 -
100道动态规划——19 UVA 12105 Bigger is Better 状态的定义以及转移方程
火柴棒的题目在ACM里面我觉得是很常见的了,这一次居然在DP里面遇见了。题目大意是用少于等于n根的火柴,拼出能够被m整除的最大的数。第一次见这样的状态定义,学习学习.....定义状态dp[i][j]表示在已经用了i根火柴的情况下拼出来了除以m余数为j的数的最大长度,一个辅助数组p[i][j]原创 2016-12-17 07:23:35 · 1454 阅读 · 0 评论 -
100道动态规划——18 UVA 1336 Fixing the Great Wall 指标函数的分解,刷表法
这道题目的在处理状态转移上面和我以前写过的一道题有点相似http://blog.csdn.net/good_night_sion_/article/details/52918040,这两个的思想是类似的,把一整个代价拆成一次次,然后累加这道题目我用的是刷表法,为了计算代价的时候方便,采用了一个前缀和数组来储存delta。状态的定义在之前也看到过,定义状态[i][j][k],表示i~j的区间原创 2016-12-12 07:45:40 · 792 阅读 · 0 评论 -
100道动态规划——17 UVA 10934 Dropping water balloons 猜数问题
老实说我感觉这个更加像递推。。而不是动态规划。一开始对答案是很疑惑的,后来去问了dalao,dalao告诉我这是猜数问题,于是我就找关于猜数问题的资料看,发现他们本质是确实是同一个问题。这里把链接放出来:http://wenku.baidu.com/link?url=fpTY4pNQy0seexyQQbA2dnMUj-_DewqBq2ndP5o8oqVYsRkFf3krlBNon2rlRa原创 2016-12-06 08:13:45 · 1466 阅读 · 49 评论 -
100道动态规划——16 UVA 1627 Team them up! 二分图,背包,不过关键还是学会转化
确实,这道题目只要知道怎么看之后就好写很多了,关键在于知道这样看。判定每一个连通块是不是一个二分图,假若有一个不是的话,那就是无解。一个连通块被划为二分图是唯一的嘛(反证法),然后就可以处理出两队,把这两队的人数之差作为一个物品。这样最后的问题就变成了,在所有物品都必须拿的情况下,背包的价值最接近0。那此时的状态就是“定义dp[i][j+n]代表前i件物品的价值之和是j的情况是不是原创 2016-12-01 20:53:47 · 934 阅读 · 35 评论 -
100道动态规划——15 UVA 10618 Tango Tango Insurrection 复杂的转移方程。。
好吧,这道题我也写了挺久的,一个是题意的缘故,还有一个就是状态转移方程写的不是好。。状态的定义其实很好找,就是dp[i][lef][rif][dir]表示上次动的腿是dir,现在左脚位于lef,右脚位于rif,跳到第i个音符的最小值。不是很明白为什么会想到反着定义。。或许是因为经验不足的缘故,反着定义的话,打印解得时候就不是递归了,而是迭代。顺带复习了一下C++11的新姿势tuple,原创 2016-11-27 12:18:07 · 546 阅读 · 0 评论 -
100道动态规划——14 UVA 1412 Fund Management 从刘汝佳dalao的代码里学到了很多。。。。
好吧。之所以有一段时间没有发100道动态规划系列了,一是最近有点事情,而是为了这道题刷了刷前面的数据结构那一章的题目。我感觉这个代码里面学到了很多东西,因此就不说自己的感想了,全写在代码注释里面了,学习了。。// UVa1412 Fund Management// Rujia Liu#include#include#include#includeusing std::map;u原创 2016-11-26 21:35:02 · 775 阅读 · 0 评论 -
100道动态规划——13 UVA 10163 Storage Keepers 有约束条件下的DP,递推,不能使用结构体作为基本单位
这道题目,我需要和另外一道题目来进行比较。UVA 12563 这是我的题解:http://blog.csdn.net/good_night_sion_/article/details/53187701在上面那一道DP里面,我的做法是利用一个结构体数组来储存当前的最优解,因此我联想到这一道题目应该也可以定义一个结构体数组来解决问题。可是我错了,这道题目是不能那样解决的,也就是说,你定义原创 2016-11-16 16:32:56 · 1187 阅读 · 0 评论 -
100道动态规划——12 UVA 1252 Twenty Questions 状态压缩,记忆化搜索,带一点小小的优化
好吧,这道题目我没有做出来。总之想的状态已经很到正解的边上了,就差一点点,诶,加油呀!定义dp[s][s0]表示当前猜了s特性而心中想的物品被猜中的特性是s0(注:此处的s和s0均为集合,第k位上的1表示第k个特性在这个集合中)最少还需要猜出心中的物品的次数我们猜了|s|次,有一些特性属于心中想的物品,有些不是,因此s0包含于s,但是s0不一定就是心中想的物品的全部特性。题目是问最原创 2016-11-15 11:31:55 · 752 阅读 · 0 评论 -
100道动态规划——1 UVA 1347 Tour 算法导论书后习题 双调巡游
这道题目实际上是算法导论动态规划那一章的一个书后习题,那个习题是说TSP是一个NP难问题,但是加上一个限制的话就可以利用动态规划把这个问题在多项式内解出来,也就是这道题目了。 限制了旅行的方式,让这个人向左一直走到底,然后一直向右走,这就不是随便的走了。 这是紫书上的一个练习题,在当初没有看紫书的时候,直接对算法导论想了许久没有原创 2016-10-19 23:17:06 · 1148 阅读 · 2 评论 -
100道动态规划——2 UVA 1625 Color Length DP 转移的代价稍微难写一点 顺便贴了刘汝佳的代码
这道题是第二道100道动态规划之中的,老实说一开始想到了定义这个状态dp[i][j]代表第一行用了i个,第二行用了j个这样。可是想不到好办法去写转移方程。。。后来实在想不出来了,好吧,看书。发现书上用一种很巧妙的办法处理的求转移的代价,那就是每一次+上已经开始但还未结束的字符个数。顿时就豁然开朗呀。马上动手 但是依然不会写。。。发现自己写出来的总是有问题。。想了原创 2016-10-25 08:49:59 · 586 阅读 · 0 评论 -
100道动态规划——3 UVA 2451 Brackets sequence 重构解 DP
好吧,这道题的难点在于重构解,我发现我写的题目基本上只要输出一个答案,要重构解得很少呀。。重构解写了我大约1H左右。。。还是不熟练呀。。 至于求得解得个数的话,区间dp,定义dp[i][j]表示从i~j的最小增加的次数,然后根据括号语言的文法定义,得出2种状态转移方程,一种是拼接两个合法串,另外一种是假若str[i]和str[j]构成一对合法括号的话,那么dp[原创 2016-10-25 23:59:19 · 676 阅读 · 0 评论 -
100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何
好吧,这道题在练练DP的同时顺便抄了一下刘汝佳dalao的板子,原创 2016-10-28 12:01:04 · 549 阅读 · 0 评论 -
100道动态规划——5 UVA 10118 Free Candies 记忆化搜索 以及 证明状态
好吧,这道题目我没想出来。。。这道题我觉得和我之前做过的一道题目有点像,100道动态规划3 UVA 1625 http://blog.csdn.net/good_night_sion_/article/details/52918040 都是从顶部拿一些东西出来,只不过是代价函数不同而已。根据那道题目的思想,这道题的状态定义至少是4维的——需要把4个堆的顶部拿了多少个元素的这个状态包含进来。然后原创 2016-10-30 12:39:11 · 547 阅读 · 0 评论 -
100道动态规划——6 UVA 1629 Cake slicing 记忆化搜索
一道动态规划题,没什么可说的。定义DP[i][j][k][l[]表示以i,j为顶点,长度为k宽度为l的蛋糕最少需要的代价。对于一个dp[i][j][k][l]来说,你既可以横着切,也可以竖着切。状态转移方程有两个。对于一个顶点在(row,col),长度为len,宽度为wid的矩形来说,竖:dp[row][col][len][wid]=min(dp[row][col][len][wi原创 2016-11-02 14:56:36 · 504 阅读 · 0 评论 -
100道动态规划——7 UVA 1630 folding 因为自己考虑的不周全WA了好几发。。。递推,KMP求子串周期
因为自己考虑不周全的缘故WA了好十几发。。后来找到一个好测试数据才弄出来。。特别感谢http://blog.csdn.net/getupdown/article/details/49542145 提供的测试数据首先是子串求周期的问题,第一反应用KMP来解决,然后KMP也调试了一会儿。。然后就是写递推,最后通过一个print函数来重构解。恩,状态转移方程是很好想到的,但是有细节需要注意。原创 2016-11-03 11:41:07 · 511 阅读 · 0 评论