动态规划
文章平均质量分 52
泳裤王子
这个作者很懒,什么都没留下…
展开
-
UVA 10131 - Is Bigger Smarter
<br />题目大意: 给出一些大象,包含它的重量、智商。要你找出最长的序列,满足重量越大、智商越低。(严格增减)<br />题目类型:dp / LIS<br />题目分析:<br />把大象按重量升序排序,然后在此序列中对智商属性找最长单减子序列。要注意的是,题目要求的都是严格增减,所以要在判断条件里考虑相等的情况以排除(主要是重量)。<br />另外还要注意,排序后,序就不是原来的序了,而题目要求输出原序。所以在排序时维护一个r[]数组。<br />对于 最长单减子序列 的dp,状态转移方程(2种):<原创 2011-05-13 16:42:00 · 887 阅读 · 0 评论 -
关于dp的状态描述
dp的第一步一般都是想出一个合适的指标d 来描述状态.而我总是想出一些重叠子问题少的, 区分性强的指标, 导致失败.其实应该尽可能想那些能造成很多重叠子问题的, 又能准确区分状态与状态的 一个指标, 这样 dp效率 才高. 维数才低.原创 2012-08-20 02:47:38 · 526 阅读 · 0 评论 -
Vijos 1243 生产产品[单调队列优化dp]
好吧...作为我A掉的第一道单调队列优化dp....在高中生的OJ上....而且我调了一个半小时样例....然后很神奇的1A = =...诶 这题果断比多校8的1005难啊...min里面的东西这么奇葩的...又 k 又 p 又 j 地...开始我以为只要一个队列, 搞了半天发现应该要N个队列... = =...写出来好神奇....转移方程什么的详见代码吧....要碎了....总结下:原创 2012-08-20 03:03:28 · 1220 阅读 · 0 评论 -
[经典dp] HDU - 2517 棋盘分割 [废话流详解]
今天真是被虐到死.......不说废话了...分析下题目:题意: 一个8x8的棋盘, 每个小格子有一个值v(0思路: 1/我们先来考虑怎么切.从简单入手..深搜吧...怎么写? 显然阶段就一个, 第几刀, 切完回溯. 每个阶段的决策呢? 根据题意, 每切一刀都要选择下那一块留下, 那一块丢掉(不再切), 由于是二维的, 可以横着切也可以竖着切..所以2x2四种决策.2/怎么原创 2012-08-03 20:33:21 · 801 阅读 · 0 评论 -
HIT summer training Contest 11 / 解题报告
今天去做了一场比赛,进去的时候还剩半小时,没出题。。。。都是跟“数”有关的题,很短小,挺有趣。HIT summer training Contest 11Solved ID Title RatioA step number A (22 / 64) 34.3原创 2011-08-05 19:11:21 · 685 阅读 · 0 评论 -
HIT summer training Contest 11 / B another number game
目录题目一、做完这题后有了一点新的理解,最大的收获是唤醒了我以前的记忆。这题算是dfs,但是纯的dfs会超时。怎么办呢?dfs是对解答树进行深搜,理论上来说解答树上每个结点都代表不同的状态,但是往往我们需要的那一部分是不变的,即有交集。既然不变,就可以把第原创 2011-08-06 01:08:24 · 725 阅读 · 0 评论 -
集合划分 DP
<br />题目:<br />e.g. TOJ 2820/XDUOJ Problem 1079 - 贝尔<br />分析:<br />先明确,设d[i][j]为i个数分成j个集合的情况数。d[i][j] = d[i-1][j-1] + j* d[i-1][j].<br />①d[i-1][j-1],也就是i-1个数分为j-1个集合的时候,只要再加一个元素独自成为一个集合,就成了i个数分为j个集合的情况。<br />②j* d[i-1][j] ,i-1个数分为j个集合的时候,j个集合中任选一个集合,新加入一原创 2011-04-10 21:35:00 · 667 阅读 · 0 评论 -
最大子段和
<br />问题描述:给定数列 a1 a2 ....an<br />要求求ai+...+aj 使其和最大<br /> <br />晚上做一道题想到这个问题,记得刘汝佳的书上是拿这个来讲分治的,印象太深,发现dp其实可以O(n),<br />还比分治简单,擦。还到网上去查了一下,继续各种误导。纠结了一下。<br /> <br />普通算法是O(n^2)<br />分治算法是O(nlogn)<br />dp达到O(n)原创 2011-04-06 22:21:00 · 468 阅读 · 0 评论 -
UVA 10003 - Cutting Sticks
<br />题目大意:<br /> 给出一根长为l的木棒,要切指定的n刀(在木棒上的绝对位置)。而每一刀的<br />消费是被切的木棒长度,求最小总消费。<br /> 另外,注意输出格式: e.g. The minimum cutting is 200.<br /> <br />题目类型: dp。<br /><br />分析:<br /> ①开始还在想是不是可以贪心之类的(虽然知道做的是dp篇=。=),于是就想<br />决策,考虑是不是每次要切较中间的部分,但第二个sample就不符合。还是老实想dp原创 2011-03-30 13:04:00 · 888 阅读 · 0 评论 -
UVA 674 - Coin Change
题目大意:用5种面额的硬币找钱(钱恰好),求方法数。要注意 1.Note that we count that there is one way of making change for zero cent. 2. Your program should be able to handle up to 7489 cents.题目类型: dp分析:原创 2011-03-29 18:03:00 · 1656 阅读 · 0 评论 -
UVA 10405 - Longest Common Subsequence
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=1346题目大意: 就是输入两个字符序列,输出两个序列的最长公共子序列(注意序列跟串的区别)。题目类型: 经典dp /LCS分析: 就是 最长公共子序列(LCS)的问题。d[i][j]表示a[i]之前、b[j原创 2011-03-28 22:52:00 · 1761 阅读 · 0 评论 -
UVA 103 - Stacking Boxes
题目大意: 输入k个n维的东西(当n=2的时候看成框,n=3时看成方体,之后是超立方..),求 最大 的长度 使每个框可以在后一个中装下。输出最大值,和 顺序 (框从小到大,顺序指输入的顺序,从1开始到k)。题目类型: dp。 DAG上的。分析:原创 2011-03-28 17:20:00 · 1129 阅读 · 0 评论 -
Uva 111 – History Grading
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=47题目大意:判断两个排列的最多相同的相对位置(顺序)。题目类型:简单dp,最长公共子序列,最长单增子序列。(注意串和序列的区别)分析:解法一:把序列sort,然后就变成求它与原序列的最长公共子串问题了。 解法二:按最长单增子序列做,最后变成求d的最大值。代码:原创 2011-03-27 22:55:00 · 1167 阅读 · 0 评论 -
UVA 147 - Dollars
<br />题目大意:就是有几种面额的硬币,输入钱S,求有多少种不同的找钱方法。S是其中最小面额的倍数。<br />题目类型: dp / DAG上的路径计数问题<br />题目分析:<br />其实这题跟 UVA 674 - Coin Change 基本一样。<br />只是输入的S是实数,而且输出的方法数会超过int32(这里WA了一次) ,所以要 long long。<br />输入的S由于是其中最小面额的倍数,所以转成int,这里要注意四舍五入(又WA了一次)。<br />最后,还有输出int64原创 2011-05-16 20:56:00 · 1010 阅读 · 0 评论 -
UVA 10066 - The Twin Towers
<br />题目大意:讲了一大堆,就是要求 最长公共子序列。<br />题目类型:dp / LCS<br />题目分析:<br />是我没睡醒吗?为什么明明写的是//Print a blank line after the output of each data set. 而不是每组数据间一个blankline。竟然调了许久。<br /> 代码:<br />① 记忆化搜索版本。<br />//那么大段题目,其实讲的就是最长公共子序列。fuck。#include<cstdio>#include<cst原创 2011-05-13 16:56:00 · 566 阅读 · 0 评论 -
树形dp 加分二叉树 / 11.05.15
<br /> <br />题目:<br /> <br /> <br /> 加分二叉树<br />【问题描述】<br /> 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第 i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:<br /> subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数<原创 2011-05-15 15:31:00 · 624 阅读 · 0 评论 -
HDU 4389 X mod f(x)[数位统计dp]
我以前习惯叫"按位dp",貌似一样的.以前都是用记忆化搜索做,转移起来不用多想. 现在学了这个大牛 的写法, 感觉用迭代写也不错.总结一下:就是拿到一个上界bound.然后逻辑上将bound按位划分为三份,一份是统计过的,一份是当前统计位,最后一份是未统计位.从bound的高到低位(a[n~1])进行统计,统计 i 位时, a[n~i+1]都是统计过的, 都当成a[i](即那一位上原创 2012-08-25 03:39:34 · 1213 阅读 · 0 评论