动态规划
文章平均质量分 65
以负熵为食
此人很懒,什么也没有留下
展开
-
POJ1458CommonSubsequence
动态规划的一道题,有必要解说的地方已写在注释中注意的是,提交时用G++原创 2017-07-16 21:37:43 · 147 阅读 · 0 评论 -
UVA11400LightingSystemDesign
永远要记住,状态转移!前一个状态可以有效帮助后一个状态。本题有一点穷举的意思。但是简化版的穷举。因为状态转移的存在,许多步骤都被省略了原创 2017-08-04 22:44:42 · 207 阅读 · 0 评论 -
UVA11584PartitioningByPalindromes
递归+记忆化搜索。但这道题最巧妙地地方在于如何判断回文,即枚举每个待判断的回文两头,从两头开始向中间递归,逐步判断两个文字是否相同,同时记录访问过两头文字,避免重复劳动,值得学习!原创 2017-08-04 23:28:33 · 186 阅读 · 0 评论 -
UVA10003CuttingSticks
本题是一道基于线性序列的dp题。用的是最优矩阵链乘的递推式。一定意义上是一种分治的思想。但自己在这方面仍然反应迟钝,仍需要较多的练习!原创 2017-08-05 11:25:59 · 245 阅读 · 0 评论 -
UVA1626BracketsSequence
打印嵌套序列的题目优先选择递归法。本题又是一道从后往前递推的题目,选定两个点,存入这两个点之间最少需要的括号数打印的时候,也需要去查找之前规划好的最优方法注意!fgets会接受'\n'的,所以在算长度时,要将'\n'的长度去掉!!!!!!!!原创 2017-08-05 14:33:05 · 271 阅读 · 0 评论 -
UVA1637DoublePatience
本题用到了全概率公式在等概率条件下变成了求“均值”的方法,通过记忆化搜索,利用map进行状态保存,来构造解答树。由于本题输入的特殊性,题中提供的输入方式也十分值得借鉴。应多多品味这道题的思想方法与技巧!原创 2017-08-13 22:11:37 · 202 阅读 · 0 评论 -
UVA1625ColorLength
这道动规题仍然用到的了滚动数组。要注意变量的设置和对问题的分解。而这两点是得出递推方程前的必备工作。我对于本题还有许多地方不甚了解。亟待加强!!!原创 2017-08-06 09:46:41 · 196 阅读 · 0 评论 -
UVA12186AnotherCrisis
本题的关键点技巧在于,排序并累加前c个叶节点最少的结点,从另一个角度实现了min函数的作用。另,vector的使用,在牺牲少量时间的前提下,保证了存储空间的充足。用vector存储非正则r叉数的子节点,十分方便!原创 2017-08-06 11:23:30 · 291 阅读 · 1 评论 -
UVA1220PartyAtHailBula
TLE了两次,结果发现是map没有清理,可能满了就爆了吧~引以为戒本题是一道树的最大独立集问题可以用一个二元组的一维表示是否选这个数。另,唯一性判断可以开一个伴随动规数组的数组,可以使问题简单化。原创 2017-08-06 14:12:33 · 170 阅读 · 0 评论 -
UVA1638PoleArrangement
又是一道动态规划的题目。递推方法很新颖,在上一个状态的基础上,插入最短的杆(有三种决策)。原创 2017-08-14 11:01:32 · 211 阅读 · 0 评论 -
UVA1218PerfectService
本题仍然是一道dp的题目。因为这道题的背景是一棵无根树,所以需要我们先确定树根,然后进行建树(用dfs)。本题代码设计的巧妙之处在于将一个点分成了三个状态,对应三种决策,这提醒我们,当需要决策时,可以让数组的一维承担标记决策情况的任务。至今有一点不解:关于的d[u][0]和d[u][1]的防溢出赋值,何种情况下会溢出?原创 2017-08-06 20:55:28 · 223 阅读 · 0 评论 -
UVA1204FunGame
本题对于包含字符串的预处理,是值得借鉴的。这与之前贪心法求区间异曲同工。#define也极大简化了代码量,可适当利用,尤其是在循环很多的情况下。注意,可能会出现两个串相同的情况,我一开始没注意这里,WA了很久。。。原创 2017-08-11 21:11:37 · 270 阅读 · 0 评论 -
UVA1336FixingTheGreatWall
用区间来dp,这回也算是长见识了。因为我们可以向左或向右决策,所以用一个区间加移动方向即可表示状态。原创 2017-08-10 12:32:15 · 333 阅读 · 0 评论 -
UVA1025ASpyInTheMetro
dp,确定状态,分类讨论。本题解的设计很巧妙:1.将时间设为状态的第一维(之后的题可以先模拟,再根据模拟情况设置状态)。(将站点设为一维很容易想到,但将看似“动态的时间”静态化,着实不易。要从熵增的角度考虑这个问题)2.分类讨论。(确定地研究某一个特定状态后。。)分类决策,并比较决策后状态的值,取其中最小的,即为解答。原创 2017-07-30 12:12:18 · 254 阅读 · 0 评论 -
UVA437TheTowerOfBabylon
这道题比较神奇的一点是,所有的长方体,只要符合题中严格小于的要求,就可以重复使用,刚开始我有些先入为主了,直接当做每个长方体只能使用一次去做,所以用例半天没过。。。也正是因为这个隐含条件,使得记忆化搜索变成了可能(否则每次遍历顶点时都要清理掉所有的保存数据)。还有一点,是递归的活用,事实上,也正因为自己对DAG模型理解不够深刻,才使得自己没有想到用递归去解决这些问题。原创 2017-07-31 22:20:24 · 174 阅读 · 0 评论 -
UVA1252TwentyQuestions
一道位运算的dp原创 2017-08-07 19:01:12 · 202 阅读 · 0 评论 -
UVA1347Tour
见博客内原创 2017-08-01 10:33:39 · 207 阅读 · 0 评论 -
UVA116UnidirectionalTSP
经过上道题的教训,本道题不再使用递归,而改用循环处理问题。习惯了就没问题的。本题是一个多段图,经过之前dp题的训练,理解起来难度也不大了。要学习的一点是,其字典序排列的方式(详见代码,因为每次探索后可行方案的数字大小被打乱,所以要处理一下,即排序)原创 2017-08-01 12:03:21 · 181 阅读 · 0 评论 -
UVA12563JinGeJinQu[h]ao
这道题的技巧在于记录上一步的情况,所以可以据此为下一步参考。但是,这道题不同于之前的是,不能将所有的状态承前赋值,因为这道题需要两个最优(含优先级),所以需要在需要的点上做标记,不需要的点禁止承前赋值。也就避免了多开数组的麻烦。这道题用到了滚动数组的技巧。能够大大节省空间,但很难记录并打印路径。原创 2017-08-01 19:01:35 · 317 阅读 · 0 评论 -
UVA10618TangoTangoInsurrection
一道条件十分复杂的动态规划题,同样需要注意分类讨论。对于一些操作,同样需要进行编码,从而简化之。原创 2017-08-09 16:33:32 · 244 阅读 · 0 评论 -
UVA1627TeamThemUp
本题最巧妙的地方,在于这个dp函数的设计。与之前做过的题的dp函数都不同,本题dp函数中的两个决策是在数组下标中完成的,而数组的值仅仅充当合法性的依据。 dfs的威力在枚举连通分量时,又一次体现出来。原创 2017-08-09 23:13:01 · 286 阅读 · 0 评论 -
UVA1412FundManagement
对于这道题的了解还不够深入,这是一道需要我回过头来再仔细推敲的题。难点就在于解题过程的繁杂。还有一点一直都不明白,状态的数量为何一定小于15000.原创 2017-08-09 23:25:35 · 323 阅读 · 0 评论 -
UVA10934DroppingWaterBalloons
本题最大的难点在于它的技巧性,在于递推方程的构建问题。有点类似于多阶段决策过程。每次取一个球,虽然从直觉上很容易想到二分,但气球的消耗使得二分法不易得出最优解。注意到输入的两个量为气球总数和层数,则这两个量就一定会出现在递推方程之中。再加上题目问到的实验次数,递推方程中的几个分量就形成初级规模了。这时候,最为关键的一点是模拟,不妨假设自己正拿着一个球,身处于某层(均用变量代替常量分析),将球扔下去,得出两种可能性,并同时初步确定了可以确定的楼层范围。以此类推即可。原创 2017-08-10 09:14:13 · 238 阅读 · 0 评论 -
UVA10817HeadmastersHeadache
一道位运算的动态规划题,建模还是瓶颈。位运算对于集合运算提供了极大的便利。原创 2017-08-07 11:48:44 · 153 阅读 · 0 评论