
动态规划
文章平均质量分 50
hao_zong_yin
有问题可以加QQ讨论2987048728,备注一下优快云
展开
-
UVA 10635 Prince and Princess——LIS
乍一看以为是LCS, 但是pq复杂度太高,不过题目中每个序列里的所有元素都不同,根据这一点我们可以遍历数组p,另vis【p【i】】=i,相当于给p中每个元素映射上一个编号,这些编号代表他们的遍历顺序。然后遍历q,根据vis数组将vis【p【i】】提取到新数组a中,然后在a中求一遍LIS就好了(仔细想一想就想到了,不解释了)#include <cstdio>#include <c...原创 2018-03-07 16:56:06 · 172 阅读 · 0 评论 -
UVA 10534 Wavio Sequence——LIS
水题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e4 + 10;const int INF = 0x3f3f3f3f;int n, a[maxn], b[ma...原创 2018-03-07 18:30:42 · 200 阅读 · 0 评论 -
UVA 10934 Dropping water balloons——dp
这道题很巧妙,用dp【i】【j】表示i个球扔j次能测试到的最高楼层,考虑第一次决策,设测试楼层为k,则有两种情况1.气球破了,那么k = dp【i-1】【j-1】+1;2.气球没破,那么在k之上还有dp【i】【j-1】层楼(相当于把k+1楼看做1楼)综上dp【i】【j】 = dp【i-1】【j-1】+1+dp【i】【j-1】#include <cstdio>#include <...原创 2018-03-07 19:00:29 · 204 阅读 · 0 评论 -
POJ 1769 Minimizing maximizer——线段树+dp
思路比较简单,然而线段树多写了一个else改了半天,感觉自己真TM的棒#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 5e4 + 10;const int maxm ...原创 2018-02-16 22:15:29 · 283 阅读 · 0 评论 -
POJ 3680 Intervals——dp+最小费用流
通过区间图最大权独立集的状态转移方程可以推断出建图方法,然后跑最小费用流,这里用了满流法来处理负权问题,说实在作为挑战程序设计网络流章最后一个题还是有一定难度的,至少我看了题解以后还似懂非懂,等我再接触一些网络流后会回来重新做这个题#include <cstdio>#include <cstring>#include <iostream>#include ...原创 2018-02-19 00:20:34 · 277 阅读 · 0 评论 -
UVA 10817 Headmaster's Headache——dp
刷表状压,没什么特别的#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = (1<<16)+10;int...原创 2018-03-14 22:31:08 · 213 阅读 · 0 评论 -
UVA 580 Critical Mass——dp
dp【i】【j】【k】表示长度为i的序列最后两位为UU UL LU LL时对应的方案数,转移方程就很好想了,参考代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 50...原创 2018-03-08 19:55:38 · 239 阅读 · 0 评论 -
UVA 1252 Twenty Questions——dp
做这道题深刻意识到自己智商不够。。。。。。A和B正在玩这个游戏,B拿着一个物品清单(每个物品有S个特征)随机选了一件(设为X)让A猜,然后A就开始问,每问一次就能确定X的一个特征,问A最少问多少次可以猜出X是哪一个物品。A每次问的时候无非就是选择一个没问过的特征k,然后根据B的答案确定X是否具有特征k,基于这一点我们可以定义状态,用dp【i】【j】表示当前问过的特征集合为i,已确定物品X具有的特征...原创 2018-03-15 22:57:03 · 310 阅读 · 0 评论 -
UVA 1631 Locker——dp
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1010;const int INF = 0x3f3f3f3f;char s[maxn],t[maxn];int ...原创 2018-03-02 10:02:58 · 315 阅读 · 0 评论 -
UVA 1412 Fund Management——dp
思路不难,但是写起来真恶心,一定要注意模块化#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <string>#include <map>using namespace std;const int ...原创 2018-03-16 18:31:09 · 268 阅读 · 0 评论 -
UVA 1632 Alibaba——dp
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 10005;const int INF = 0x3f3f3f3f;int n, a[maxn], b[maxn], ...原创 2018-03-03 13:11:22 · 231 阅读 · 0 评论 -
UVA 1025 A Spy in the Metro——dp
记得当时刚做dp时这道题死活做不出来,现在重新做一遍,也算是消除心理阴影了经过推理,我们发现当前时刻、当前车站构成了一个状态,而做哪一班车去下一个车站与状态转移密切相关,因此我们定义dp【i】【j】表示间谍在时刻i位于车站j的最小等待时间(进一步思考会发现递推时间时没有后效性的,所以这个状态时正确的),结果就是dp【T】【N】。在上面状态的基础上我们考虑状态转移,首先确定一点就是每辆车到达每个车站...原创 2018-03-11 15:23:31 · 183 阅读 · 0 评论 -
UVA 437 The Tower of Babylon——dp
建n*3个节点的DAG记忆化搜索一下就可以了,水题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100;int kase = 1, n, G[maxn][maxn]...原创 2018-03-11 16:05:19 · 191 阅读 · 0 评论 -
UVA 1347 Tour——dp
一开始以为是TSP,一看紫书n最大为1000,就直接断了这个念头,其实稍微一想就发现这个题固定了起点终点,所以不是TSP问题。回到正题,这个题的特点是有两条线路,一条往一条反,完全可以看成两条从起点到终点的线路,我们设这两条线路为A B,定义dp【i】【j】为:A走到第i个点,B走到第j个点,且max(i,j)的点都被访问这个状态下的最下路程(很明显这个这样定义是没有后效性的),那么最终结果就是在...原创 2018-03-11 21:37:12 · 239 阅读 · 0 评论 -
UVA 242 Stamps and Envelope Size——完全背包
价值和重量调换过来进行完全背包,注意输出格式#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;int S, N;struct Set { ...原创 2018-02-25 13:02:16 · 304 阅读 · 0 评论 -
UVA 116 Unidirectional TSP——dp
简单递推#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 110;const int INF = 0x3f3f3f3f;int m, n, a[maxn][maxn]...原创 2018-03-11 22:48:44 · 199 阅读 · 0 评论 -
UVA 12563 Jin Ge Jin Qu hao——01背包
t的范围是个幌子,因为他不会超过时间的总和,然后就是简单的01背包了#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 180*50+678+5;const int IN...原创 2018-03-12 09:23:27 · 189 阅读 · 0 评论 -
UVA 10723 Cyborg Genes——lcs
两个串a、b按照题目要求合成的串c的长度一定为lena+lenb-lcs(a,b),其中lcs(a,b)表示a、b的最长公共子序列。求解长度为lenc的串的数量可在普通lcs求解基础上加上一个cnt,cnt【i】【j】表示用串a前i个,串b前j个合成串c且串c长度最短时的情况数,然后就会有如下情况:1.当a【i】!=b【j】时,dp【i】【j】=max(dp【i-1】【j】,dp【i】)【j-1】...原创 2018-02-25 18:49:10 · 217 阅读 · 0 评论 -
UVA 1669 Holiday's Accommodatio——树形dp
经过简单分析可以发现题目结果和每条边的遍历次数密切相关。而遍历次数又和子树点的个数密切相关,所以我们可以从根节点出发进行树形dp,dp【i】维护的是以i为根节点(包括i)的子树的节点个数。然后考虑状态转移方程,在这之前我们假设整棵树的根节点是1,那么除了1之外每个点都可以对应一条边,这是树形dp问题中将点和边关联的常用操作,这样关联以后我们就可以用ans【i】表示i节点对应的边的最大通过次数(顺便...原创 2018-03-05 00:16:59 · 330 阅读 · 0 评论 -
UVA 11400 Lighting System Design——dp
类似于LIS的递推,难在一个不等式的证明,这一点这篇博客写的很好,极力推荐点击打开链接#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1010;const int I...原创 2018-03-12 19:45:49 · 174 阅读 · 0 评论 -
UVA 11584 Partitioning by Palindromes——dp
n^2预处理一下a【i】【j】是否为回文串,处理的方法比较笨,分奇偶写的。。。剩下的dp思路很好想,不多说了#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1010;...原创 2018-03-12 20:52:35 · 190 阅读 · 0 评论 -
UVA 1645 Count——dp
dp【i】表示i个节点的树的情况数,那么求dp【i】时我们可以先拿出一个点作为根节点,这时还剩i-1个点,这i-1个点可以划分成数量为(i-1)/j大小为j的子树当且仅当(i-1)%j==0,而划分成大小为j的子树的情况数是dp【j】,这个在之前就求出来了,所以只需要枚举一下i和j就可以打表求结果了#include <cstdio>#include <cstring>#...原创 2018-03-05 20:17:52 · 210 阅读 · 0 评论 -
UVA 1625 Color Length——dp
类似于LCS的递推方法,状态的定义和转移包括辅助数组都不难想, 但是细节很多,比如说一个字符的开始和终止要综合考虑两个串,以及对于只在一个串中出现的字符的考虑等等,细节参考代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using name...原创 2018-03-12 22:37:51 · 202 阅读 · 0 评论 -
POJ 1651 Multiplication Puzzle——dp
类似于最优矩阵链乘的区间dp,定义dp[i][j]为区间【i,j】的元素除了头尾都被拿走这个状态下的最小总和,边界就是长度为2的区间初始化为0,这样转移方程就很好写了#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace...原创 2018-03-13 10:28:26 · 194 阅读 · 0 评论 -
四边形不等式优化dp
原文链接今天第一次学习四边形不等式优化dp,感觉优化效果十分给力,不过数学味道比较浓重,证明比较复杂。因此这里删繁就简,给出关于四边形不等式优化必须要明白的地方,以后直接套用条件即可。四边形不等式优化条件在动态规划中,经常遇到形如下式的转台转移方程:m(i,j)=min{m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max)上述的m(i,j)表示区间[i,j]上的某...转载 2018-03-13 11:08:09 · 285 阅读 · 0 评论 -
UVA 10003 Cutting Sticks——四边形不等式优化dp
不能用单调队列做的原因是切割点固定很明显小区间的权值小于大区间,交错区间的权值等于两区间的交加上两区间的并,权值满足区间包含的单调性,状态满足四边形不等式性质,所以第三重循环可以优化,设s【i】【j】为区间【i,j】的最优切割点,那么求解dp【i】【j】时只需要遍历s【i】【j-1】~s【i+1】【j】即可,复杂度为n^2#include <cstdio>#include <c...原创 2018-03-13 11:40:04 · 484 阅读 · 0 评论 -
UVA 1626 Brackets sequence——dp
印象中第5遍了。。。。。。换行卡的挺严,嗯#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 200;const int INF = 0x3f3f3f3f;int T;...原创 2018-03-13 13:28:26 · 195 阅读 · 0 评论 -
UVA 1627 Team them up!——dp
第三遍,顺利1A#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>using namespace std;typedef pair<int, int> P;const int max...原创 2018-03-23 13:44:41 · 222 阅读 · 0 评论 -
UVA 12186 Another Crisis——dp
水题#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <cmath>using namespace std;const int maxn = 1e5 + 10;...原创 2018-03-13 18:03:21 · 208 阅读 · 0 评论 -
UVA 10934 Dropping water balloons——dp
惊了,竟然有1e64这个数据,题目骗人啊。。。。。。用cin的小伙伴们注意下一,cin是不能读1e64的(会直接终止输入),scanf读1e64会爆掉变成9223372036854775807,这个数据对题目结果没有影响,因此用scanf就行了,总之这道题并不是很严谨#include <cstdio>#include <cstring>#include <iost...原创 2018-03-23 14:44:43 · 216 阅读 · 0 评论 -
UVA 1220 Party at Hali-Bula——dp
紫书P282讲得很明白#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>using namespace st原创 2018-03-13 19:51:01 · 235 阅读 · 0 评论 -
UVA 1218 Perfect Service——dp
一开始题目没读好,各种错误定义,所以提醒大家做题之前一定要认真读题。。。。。。加上读错题浪费的时间,这题一共做了两个小时,一开始我以为这是两遍dfs综合考虑父树子树状态的题目,但进行了一些尝试后我发现只用子树状态就可以完成这道题目然后是找有用的状态,这个不是很难想,最基本的状态就是一个点是建服务器还是不建服务器,我们用黑点表示建服务器,白点表示不建服务器,考虑题目的限制,一个状态至少要包含树中的两...原创 2018-03-13 22:29:36 · 203 阅读 · 0 评论 -
UVA 1336 Fixing the Great Wall——dp
从紫书前面做过来的话就知道是老思路了,额外加个累计数组就好,另外精度卡的不是很严格,写起来可以随意一些#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1010;con...原创 2018-03-23 16:51:20 · 284 阅读 · 0 评论 -
POJ 3124 The Bookcase——dp
很好的一道背包题,思路这篇博客写的很好https://blog.youkuaiyun.com/wings_of_liberty/article/details/7522213然而写完了发现居然2900s!!!,卡边过对于强迫症来说是致命的,不过也好优化,在上面思路的基础上记录维护一下宽度的前缀和,dp时和宽度极限值做一个min就好了,成功优化到1500s#include <cstdio>#inc...原创 2018-03-26 01:13:43 · 293 阅读 · 0 评论 -
ZOJ 2432 Greatest Common Increasing Subsequence——dp
可以在状态转移时压缩一下路径,这样打印时就不需要判重了注意结果为0时只输出0,这点很坑#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef pair<int, int> P;co...原创 2018-03-26 11:00:39 · 215 阅读 · 0 评论 -
HDU 1423 Greatest Common Increasing Subsequence——dp
zoj2432的简化版,但是这道题忘了说输出结果两两之间一个空格,导致pe了一发顺便用了滚动数组优化一下#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 510;con...原创 2018-03-26 11:02:43 · 233 阅读 · 0 评论 -
UVA 12099 The Bookcase——dp
和poj3124一模一样https://blog.youkuaiyun.com/hao_zong_yin/article/details/79692770#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const ...原创 2018-03-26 11:05:19 · 281 阅读 · 0 评论 -
UVA - 10617 Again Palindrome——dp
求一个字符串有多少回文子串(可以不连续)区间dp的无后效性思想,lcs的状态转移方程。。。。。。定义dp【i】【j】为区间【i,j】的回文子串的数量s【i】!=s【j】,dp【i】【j】 = dp【i+1】【j】+dp【i】【j-1】-dp【i+1】【j-1】s【i】==s【j】,dp【i】【j】=dp【i+1】【j】+dp【i】【j-1】+1感觉是从逻辑上推的状态转移方程,这方面还是不熟练#in...原创 2018-03-27 00:41:16 · 219 阅读 · 0 评论 -
UVA 1025 A Spy in the Metro DP
#include #include #include #include #include using namespace std;const int INF = 0x3f3f3f3f;int n, t, times[100], m1, m2;int has_train[1000][1000][2];int dp[1000][1000];int main(){ i原创 2017-04-13 15:49:17 · 287 阅读 · 0 评论 -
动态规划题目整合
源博客链接:http://blog.youkuaiyun.com/cc_again/article/details/25866971转载 2017-05-16 15:16:18 · 1075 阅读 · 1 评论