————动态规划————
eIectron
优美的代码是成功AC的第一步。看着那么多博客不再更新,这就是我几年后的状态吗?要是走了就再也不回来了。
展开
-
杭电女生赛—Combine String
我总感觉这题我写过题解的,但是为啥不见了呢?Combine StringTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 665 Accepted Submission(s): 214Problem Desc原创 2016-07-22 21:14:37 · 493 阅读 · 0 评论 -
UVA 437 The Tower of Babylon (动态规划)
紫书上动态规划第二道例题。这道题其实就是求DAG最长路,而且是无固定源点和终点的,基本上套用紫书上那种格式就行。这道题难在如何表示。这道题其实就是一个(len,wide,high)立方体可以拆成三个来看,所以直接造三种状态出来就好了,一个高为high,一个高为len,一个高为wide。由于是要求下一个的长和宽必须严格小于当前的长和宽,我们先把这些都排序存起来,小的和小的比较,大的和原创 2017-08-30 12:58:11 · 261 阅读 · 0 评论 -
UVA1347 Tour(DP)
紫书动态规划例题9-3题意:给出一些点的坐标,要你从最左边的点(唯一)走到最右边的点(唯一),然后再返回最左边的点,所有的点都要经过且只能经过一次,问最短距离是多少。解法:首先,这种返回问题是很常见的套路了,我们直接把他看成是两个人同时从最左边的点出发走到最右边的点比较直观。很容易想到直接dp【i】【j】表示第一个人走到i,第二个人走到j,但是我们无法从i和j中看出他们是否有走过重复的点。原创 2017-09-10 10:04:23 · 283 阅读 · 0 评论 -
[ZJOI2006]物流运输 (最短路+dp)
如果本题没有换线路要k的花费这个条件,很明显就是直接枚举天数,每次都跑一个最短路即可。但是现在有这个条件,我们就要加上dp的思想,来分段决策。解法:1.枚举起始天和终止天,然后排除这个范围内无法一直有效的点,跑一遍最短路,用cost[i][j]记录此时到达港口m的最小花费。2.进行一次dp,dp[i]代表的是第i天开始到第n天的最小花费,边界为dp[n + 1] = -k。然后从第n天原创 2017-09-26 18:42:15 · 291 阅读 · 0 评论 -
codevs1403 新三国争霸 (最小生成树+dp)
这道题目的题意其实我觉得挺迷的,不过写过bzoj1003物流运输的话,这两道题考察的知识点类似,就可以明白什么意思了。只不过bzoj1003是最短路+dp,而这道题是最小生成树+dp。代码如下:#include#include#include#include#include#include#include#include#include#include#includ原创 2017-09-27 10:28:57 · 360 阅读 · 0 评论 -
UVA 116 Unidirectional TSP (多阶段决策问题,DP解决)
紫书上的例题,我们令dp【i】【j】为从表格i,j点开始到最后一列的最小花费。由于还需要输出字典序,所以每一个点我们都要得到它能到下一列哪三行,对于第0行和第n-1行特殊处理,然后将这三行排序,从最小的开始检验,如果符合条件则更新,这样就可以处理相等的情况,并且字典序是最小的。代码如下:#include#include#include#include#include#includ原创 2017-09-21 10:15:32 · 247 阅读 · 0 评论 -
UVA 11400 Lighting System Design (DP)
题意:给出一些灯泡,每个灯泡有四个参数,电压,所需电源价格,当前灯泡价格,需要购买的数量。还有一些条件,为了省钱,低电压的灯泡可以替换成高电压的灯泡,每种灯泡都只能对应唯一的电源,不同的灯泡之间是不能互相使用电源的。解法:题目还是相对简单的,首先我们用前缀和得到前n种灯泡的数量,且显然,如果一种灯泡要转为更高电压的灯泡,肯定是全部一起转的。我们不断枚举区间,代表这个区间的灯泡都用第i种灯泡。然原创 2017-10-02 16:33:19 · 183 阅读 · 0 评论 -
UVA 11584 Partitioning by Palindromes(DP)
题意:给出一个由小写字母组成的字符串,求它最少由多少个回文串组成。解法:dp[i]代表前i个字符组成的字符串最少能由多少个回文串组成。并且枚举j-i(j代码如下:#include#include#include#include#include#include#include#include#include#include#include#includeusing原创 2017-10-04 10:02:54 · 164 阅读 · 0 评论 -
POJ 3280 Cheapest Palindrome(区间DP)
题意:给出一个字符串,你要把他凑成回文串,问最小花费。解法:一开始以为只能在两边加减字母,然后一直wa。后来拿了别人的程序发现可以在中间加字母的。dp一下,dp[i][j]表示把i - j的字符串凑成回文串的最小花费。转移方程:如果i和j的字符相同,那么直接就是他们包围的字符串的最小花费。dp[i][j] = dp[i - 1][j - 1]. 如果不相同,那么就取两边变化的最小原创 2017-10-05 11:26:28 · 244 阅读 · 0 评论 -
南阳理工OJ 石子归并(经典区间DP)
点击打开链接解法:一开始我愚蠢地认为一个一个并就可以了,但是样例都过不去。发现要区间区间地合并才对。那么转移方程就是dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + cnt[j] - cnt[i - 1]);dp[i][j]表示i到j合并起来的最小花费。cnt[i]是前i个的石子数目。代码如下:#include#include原创 2017-10-06 11:59:30 · 240 阅读 · 0 评论 -
UVA 12563 Jin Ge Jin Qu hao(多阶段决策问题,DP)
题意:给出n首爱唱的歌,剩余t时间。由于ktv最后不会强制暂停你的歌曲,所以最后你可以点一首劲歌金曲,也就是最后可以加上678秒多唱一些时间。问在保证能唱的歌曲尽量多的情况下,唱歌的时间尽量长。输出最多的唱歌数目和最长的唱歌时间。给出的n首个不会超过三分钟。解法:很明显,劲歌金曲是一定要唱的,毕竟时间长。虽然t的范围是1e9,但是最多只有50首个,每首歌180秒,最多也才9000秒。大于900原创 2017-09-23 19:22:32 · 274 阅读 · 0 评论 -
UVA 1025 A Spy in the Metro (动态规划)
紫书上动态规划例题,也是2003的Finals题。紫书上说的十分浅显易懂。对于这道题,我们首先要明白每一秒我们可以干什么。我们可以去前一个车站,可以去下一个车站,也可以在原地等一秒。而影响我们选择哪种方案的要素为当前时间和所处的车站。所以这两个就成为我们要不断调节的元素。我们采用dp[i][j]代表当前是第i分钟,所处第j个车站,我们希望停留的时间尽量少,所以我们dp里面每个位置记原创 2017-08-27 15:25:53 · 252 阅读 · 0 评论 -
POJ 1742 Coins(多重背包)
有很多博客都讲得非常好,就是dp[i][j]表示前i种硬币凑成j元时第i种硬币还剩下多少个,其中-1表示无法到达。1.当dp[i-1][j] >= 0的时候,就说明前面i-1种硬币可以凑到这个价格,就不需要第i种硬币了,所以当前位置就是剩下c[i]个硬币。2.当j 3.当dp[i][j - a[i]] >= 0的时候,说明可以凑到这个位置但是需要花费一枚第i种硬币。4.否则这个位原创 2017-08-21 09:42:32 · 205 阅读 · 0 评论 -
2016年校赛 A题—地宫寻宝 建立三位数组的DP问题
00032:Problem A 地宫寻宝总时间限制: 1000ms内存限制: 65536kB描述Hujie在普吉岛观摩2016年ACM-ICPC World Final期间,从当地人手中得到几张藏宝图。图上画的是岛上的若干座矩形地下城堡,城堡每个房间都是正方形的且藏有宝藏。城堡南北向有N个房间,东西向有M个房间,且相邻的房间是相通的。当地人告诉他,由于是地下城堡氧气含量稀少,一直没原创 2016-06-03 20:50:38 · 703 阅读 · 0 评论 -
奇怪的背包题目 - Proud Merchants
F - Proud MerchantsTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescriptionRecently, iSea went to an ancient country. For such a long time, it was the mo原创 2016-05-20 11:11:08 · 316 阅读 · 0 评论 -
POJ1088 滑雪(记忆化搜索入门级题目)
滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 94962 Accepted: 35990DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或原创 2017-02-19 13:46:11 · 294 阅读 · 0 评论 -
Codefroces 463C Gargari and Bishops(记忆化搜索暴力一下)
C. Gargari and Bishopstime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputGargari is jealous that his friend C原创 2017-02-19 16:31:31 · 406 阅读 · 0 评论 -
Codefroces455A Boredom
http://codeforces.com/problemset/problem/455/A题意:选取一个数字AK,然后获得AK分数,序列中AK + 1 和 AK - 1的数字会被删除。然后重复,直到序列为空。解法:好久没写过DP了,已经完全不会写了,即使这是一道超级基础的DP。很明显,我们不知道选取哪个数字比较好,选取一个数字后有很明显的后效性,导致ak+1和ak原创 2017-03-12 17:51:11 · 357 阅读 · 0 评论 -
HDU 5375 Gray code
http://acm.hdu.edu.cn/showproblem.php?pid=5375对于这道题,我们首先去百度一下二进制如何转换为格雷码,我选用的是,如果第n位二进制和第n+1位二进制不相同则第n位格雷码位1,否则为0,格雷码最高位由二进制最高位决定。比如二进制0101,格雷码位0111。我们还希望格雷码算出来最大,这怎么办呢?我们想到了二进制不断转换为格雷码且要格雷码最大,需原创 2017-05-02 10:35:59 · 255 阅读 · 0 评论 -
HDU 1111 Piggy-Bank(完全背包例题)
http://acm.hdu.edu.cn/showproblem.php?pid=1114这道题就是完全背包模板题?但是有一个问题就是他是要最终的结果是刚刚好塞进去的。所以我的做法是memset(-1),初始化第一个物品,然后后面在两种地方dp.前提是j >= volume[i]第一种,dp[i][j - volume[i]] != -1,那么dp[i][j] = dp[i][j -原创 2017-05-24 20:07:52 · 418 阅读 · 0 评论 -
POJ 2385 Apple Catching(DP)
http://poj.org/problem?id=2385题意:有两个苹果树,在t分钟内,每分钟内在两棵树中任意一棵会掉落一个苹果,你一开始在树1下,你每分钟可以在树1和树2之间来回,但是来回次数不能超过w次。问能捡到的最多的苹果数目是多少。解法:一道基础的dp题。类似于01背包。我写的时候百思不得其解,一直wa,后来才发现,a[i] == 1 && dp[i - 1][1] + 1这种原创 2017-07-22 20:28:57 · 191 阅读 · 0 评论 -
POJ 3616 Milking Time(DP)
http://poj.org/problem?id=3616题意:给出一些牛开始产奶和结束产奶的时间还有他们能产出的价值,每时每刻只能有一头牛产奶而且相邻的产奶的两头牛必须经过R小时,问能获得的最大产奶价值是多少。解法:DP,我是直接暴力去找每头牛前面满足结束时间last.end 代码如下:#include#include#includeusing namespace std原创 2017-07-24 10:56:32 · 161 阅读 · 0 评论 -
CodeFroces 977F. Consecutive Subsequence
题意:给出一个长为n的序列,求出最长的递增序列且该序列公差为1.解法:首先可以发现n只有2e5,但是数字范围a是1-1e9. n相比a很小,所以一贯的套路就是离散化n个数字。 由于这个递增序列公差必须为1,我们考虑dp,递推式就是dp[i]=dp[i-1]+1,i代表当前数字大小,dp[i]代表算上i最长的序列是多长。 由于数字太大,不可能开1e9的...原创 2018-05-17 13:04:14 · 456 阅读 · 0 评论