
动态规划-基础
文章平均质量分 54
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 10739 String to Palindrome(dp)
题目连接:10739 - String to Palindrome题目大意:给出一个字符串, 通过增加, 删除或替换一个字符, 使得该字符串变成一个回文串, 要求操作最少, 输出最小的操作步数。解题思路:对于每个区间[i, j]:1、str[i] == str[j], dp[i][j] = dp[i + 1][j - 1];2、 str[i] != str[j],原创 2013-09-13 19:54:41 · 2016 阅读 · 0 评论 -
uva 10401 Injured Queen Problem(dp)
题目链接:10401 - Injured Queen Problem题目大意:给出一个字符串,要求在n * n(n为字符串的长度)的棋盘上摆放n个受伤的皇后,受伤的皇后只能攻击到同一列和它周围8个格子,如果字符串中第i个字符为'?'表示第i + 1个皇后可以摆放在任意行,如果为1 ~ F表示第i+1个皇后必须摆放在第str[i]行, 问,有多少种不同的摆法?解题思路:一开始原创 2013-09-18 14:58:16 · 1786 阅读 · 0 评论 -
uva 825 - Walking on the Safe Side(dp)
题目链接:825 - Walking on the Safe Side题目大意:给出n,m,现在给出n行数据, 每行有k(k为不定值)个数字, 第一个数字代表行数, 后面k - 1个数代表当前行的这个位置不可走, 问有多少路径可以从(1,1)到(n,m),只能向下或向右。解题思路:dp[i][j] = dip[i - 1][j] + dp[i][j - 1], 很简单的dp原创 2013-09-18 16:46:47 · 1743 阅读 · 0 评论 -
uva 10617 - Again Palindrome(dp)
题目链接:10617 - Again Palindrome题目大意:给出一个字符串,可以通过删除一个字符的操作,问,能形成多少种回文串?(也就是问该字符串中有多少的子串为回文串,子串可以不连续)解题思路:以前貌似做过类似的题目,所以思路很清晰,dp[i][j]代表从第i个字符到第j个字符有多少个回文子串。1、i == j时,dp[i][j] = 1。2、str[i]原创 2013-09-19 10:39:01 · 1526 阅读 · 0 评论 -
uva 10201 - Adventures in Moving - Part IV(dp)
题目链接:10201 - Adventures in Moving - Part IV题目大意:有n个测试数据组, 对于每个测试组,最先给出一个距离lenth, 然后给出若干个加油站的位置以及加油站每升油的价钱。然后有量油桶容量为200升的卡车,出距离为0的位置开始移动向lenth,每升油可以使的卡车走一个单位距离,问,卡车到达lenth的时候,并且油箱中仍有100升油,最少花费多少钱原创 2013-09-23 23:32:58 · 1676 阅读 · 0 评论 -
uva 11258 - String Partition(dp)
题目链接: 11258 - String Partition题目大意:给出一个字符串,由0~9组成,现在可以将字符串切割成若干段,每一段便可代表一个数值,但是这个数值不能大于int的最大上限,问,如何切割可以使得这若干个数的和最大。解题思路:一开始想用区间dp做,但是小伙伴告诉我可以用递推的方法,就去找了一下代码,确实非常简单,dp[i]表示第i位数以前的最优解,由原创 2013-09-23 23:53:55 · 2452 阅读 · 0 评论 -
uva 10029 - Edit Step Ladders(dp + 二分)
题目链接:10029 - Edit Step Ladders题目大意:给出若干个按照字典序排列的字符串,每两个字符串之间可以存在一个梯度,也可不存在,所谓梯度就是指前一个字符串同过改变、删除或填加一个字符,是转化后的字符串等于后面一个字符串,问,在所给出的若干个字符串中最多能连续通过梯度连接多少个字符串,输出最大值。解题思路:类似与LIS,可是用o(n^2)的算法却超时,然原创 2013-09-25 22:01:40 · 1670 阅读 · 0 评论 -
uva 10759 - Dice Throwing(dp)
题目链接:uva 10759 - Dice Throwing题目大意:给出n和x,计算在丢n个色子,出现的点数大于等于x的概率,要求分式最简。解题思路:一开始方向想错了,一直在枚举num[i][j], i表示i个色子丢出的点数小于x的情况,一直找不到状态转移方程,推出来几个都是错的,算了一下午;后来发现num[i][j] 与num[i][j + 1]中间的增长个数与用i个色原创 2013-10-23 17:32:14 · 1404 阅读 · 0 评论 -
uva 10721 - Bar Codes(dp)
题目链接:uva 10721 - Bar Codes题目大意:给出n,k和m,用k个1~m的数组成n,问有几种组成方法。解题思路:简单dp,cnt[i][j]表示用i个数组成j, cnt[i][j] = ∑(1 ≤ t ≤min(k, j)) cnt[i - 1][t].#include #include #define ll long longco原创 2013-10-31 09:27:27 · 1359 阅读 · 0 评论 -
uva 10516 - Another Counting Problem(dp)
题目链接:uva 10516 - Another Counting Problem题目大意:给出n和d,计算出有多少n叉树层数为d层,对于每个节点,要不为空,要不为满。解题思路:c[i]表示说层数不大于d的n叉数的个数,c[i] = c[i - 1] ^ n + 1, 最后答案ans = c[d] - c[d - 1].#include #include #原创 2013-11-16 17:04:51 · 1820 阅读 · 0 评论 -
uva 10910 - Marks Distribution(dp)
题目链接:uva 10910 - Marks Distribution题目大意:给出n,t和p,表示有n个科目,然后某人得了t分,然后每个科目的及格分数为p, 他全部及格了(即每科分数都在p以上),问说他有几种得分的可能。解题思路;首先问题可以转换成用i个数,组成和为j的种类,dp[i][j]。然后状态转移方程dp[i][j] = dp[i - 1][j] + dp[i][原创 2013-11-02 17:33:59 · 1545 阅读 · 0 评论 -
uva 10247 - Complete Tree Labeling(dp)
题目链接:uva 10247 - Complete Tree Labeling题目大意:给出k和d,表示有一个k叉d层的完全k叉数,然后它的节点数为n个,用1~n给这棵树德节点标号,要求说任意一个节点的值不能大于它的任意一个子节点,每个数只能用一次。问优多少种标记的方法。解题思路:一般dp都是有dp[i - 1]推导出dp[i]的,这题也不例外,只不过思路和往常不太一样。节原创 2013-11-17 00:21:49 · 3461 阅读 · 0 评论 -
uva 10081 - Tight Words(dp)
题目链接:uva 10081 - Tight Words题目大意:给出k和n,表示可以用0~k之间的数值来组成长度为n的数组,然后数组中有一种较为特殊的情况,即任意两个相邻的数值的差不超过1,计算这种特殊的数组占总数的百分比。解题思路:p[i][j]表示说长度为i,且最后一个数字为j的数字占长度为i的数组的百分比。#include #include i原创 2013-11-06 16:45:16 · 1526 阅读 · 0 评论 -
uva 10128 - Queue(dp)
题目链接:uva 10128 - Queue题目大意:给出n,p和r,表示有n个长短不一的人排队,从前面看可以看到p个人,从后面看可以看到r个人,问这种队列有多少种。解题思路:这题前几天看到的,当时一直想这说每次加入一个最高的,结果发现加进的最高个站哪里都是问题,然后今天灵光一闪,想到可以每次加入最矮的,这样他站在最前面的话,p就加1(挡不住任何人);站在队末尾的话,r就加原创 2013-11-06 16:54:05 · 1511 阅读 · 0 评论 -
uva 10157 - Expressions(dp)
题目链接:uva 10157 - Expressions题目大意:给出n和d,表示说有n/2对括号,要求组成深度为d的表达式,问有多少种。解题思路:一开始想说,每增加一对括号无非是加在最前面和最后面,要不一前一后,然后就有了dp[i][j] = dp[i - 1][j] * 2 + dp[i - 1][j - 1].结果WA了。反思一下,考虑的不周全,以为括号放中间也是可以原创 2013-11-06 17:03:30 · 1585 阅读 · 0 评论 -
uva 10269 - Adventure of Super Mario(Floyd + Dijkstra + dp)
题目链接:uva 10269 - Adventure of Super Mario题目大意:马里奥就出桃子之后,要返回自己所居住的村子标号为1,给出A 和 B表示有A个村子和B个城堡,大魔王所居住的城堡A + B,1 ~A为村子,A + 1 ~ B为城堡。现在有m条路,连接着村子、城堡;每条路有它的距离;然后马里奥可以使用k次魔法,可以从一个地方瞬间移动到另外一个地方(不可以在路中间停原创 2013-11-24 16:15:00 · 1838 阅读 · 0 评论 -
fzu 2037 Maximum Value Problem(递推)
题目链接:fzu 2037 Maximum Value Problem题目大意:给出n,然后有一个长度为n的序列,元素由1~n组成,现在有一个Max = 0,问说计算所有排列可能的序列需要更新多少次Max。列如:但n = 2的时候,存在序列s1 = { 1, 2}, 和序列s2 = {2, 1}, f1 = 2, f2 = 1, 所以ans = 3。并且要输出p[i] = f[i] /原创 2013-12-11 20:09:08 · 1068 阅读 · 0 评论 -
uva 1555 - Garland(递推)
题目链接:uva 1555 - Garland题目大意:给出n和a,求出满足题目给定的四个条件的序列,要求h[n] = b最小。解题思路:根据h[i] = (h[i-1]+h[i+1])/2 - 1可以的出h[i+1] = 2h[i] + 2 - h[i-1], 然后可以得出h[n] = k * h[2] - b,只要维护h[2]保证h均大于等于0且最小即可。#原创 2013-12-28 21:22:40 · 1318 阅读 · 0 评论 -
CodeForces 337C Captains Mode(dp+位运算+贪心)
题目链接:CodeForces 337C Captains Mode题目大意:dota2游戏选择英雄,先给出n个英雄的力量值,然后给出m个操作,p/b num,p代表第num个玩家可以选择一个英雄,b 代表第num个玩家可以封掉一个英雄,即谁都不可以选,然后两队选完之后,比较说两队英雄总力量值的差,两人都按照最优方案去选择。解题思路:dp+位运算+贪心。首先原创 2014-01-29 17:34:34 · 2496 阅读 · 0 评论 -
Codeforces 385D Bear and Floodlight(几何+dp)
题目链接:Codeforces 385D Bear and Floodlight题目大意:给出一个区间[l, r],然后给出n个探照灯,问说n个探照灯能照到区间[l,r]的最大范围。解题思路:用二进制表示说哪些灯被选中了,dp[i]表示这些灯能够照到的最大范围。#include #include #include #include using name原创 2014-01-30 11:56:23 · 2208 阅读 · 0 评论 -
uva 672 - Gangsters(dp)
题目链接:uva 672 - Gangsters题目大意:给出n,K,T,表示一个酒店将要有n位客人到来,然后给出每个客人的ti,表示在ti时刻第i位客人来到酒店,ti ≤ T;再给出pi,表示第i位客人进入酒店为酒店带来的收益;接着是si,表示第i位客人要进入酒店需要将门开到正好si的大小。酒店的门每时刻可以增加1,减少1或不动,问说酒店的收益最大值。解题思路:dp[i]原创 2014-02-21 13:46:23 · 1208 阅读 · 0 评论 -
uva 473 - Raucous Rockers(dp)
题目链接:uva 473 - Raucous Rockers题目大意:有n首歌,以及m个磁带,每个磁带的容量为t,给出n首歌的大小,现在要将n首歌存放在m个磁带上,一首歌不能分开放,求最大的存放歌曲数。解题思路:dp[i][j][k]表示第i首歌放在j磁盘的k位置(结束位置)时可以存放的最多歌曲数。dp[i][j][k] = max(dp[i-1][j][k], dp[原创 2014-02-21 15:18:45 · 1210 阅读 · 0 评论 -
uva 1351 - String Compression(dp)
题目链接:uva 1351 - String Compression题目大意:给出一个字符串,如果相邻的m个连续子串相等的为s0话,可以将该段表示为m(s0),问说最短需要几个字符可以表示所给字符串。解题思路:首先要注意(1)m可能是两位数三位数等等;(2)左右括号各算一个字符;(3)s0可以为简化过的字符串,例如s0中包含了一个k(s1)。然后是dp[i][j]表示的原创 2014-02-23 20:58:42 · 1181 阅读 · 0 评论 -
uva 1291 - Dance Dance Revolution(dp)
题目链接:uva 1291 - Dance Dance Revolution题目大意:有一台跳舞机,中间位置是0,然后从0的右边开始顺时针分别是1,2,3,4;从0到1,2,3,4要消耗2点体力;每个位置到斜角的消耗的体力为3点(例如1到2,4);到对角消耗的体力4点(1到3);原地不动消耗的体力为1;现在题目给出一个序列是要求踩的位置,两只脚的初始位置都在0,在跳得过程中不能两只脚同原创 2014-02-24 12:46:47 · 1482 阅读 · 0 评论 -
uva 10453 - Make Palindrome(dp)
题目链接:10453 - Make Palindrome题目大意:给出一个字符串,通过插入字符使得原字符串变成一个回文串,要求插入的字符个数最小,并且输出最后生成的回文串。解题思路:和uva 10739的做法相似,只是本题只能插入字符,所以只要在考虑子问题的同时记录住最优的选择就可以了。#include #include const int N = 10原创 2013-09-17 20:46:04 · 1388 阅读 · 0 评论 -
uva 662 - Fast Food(dp)
题目链接:662 - Fast Food题目大意:给出n,m,在一条街上有n家餐馆,然后给出n家餐馆的坐标,然在可以在餐馆的基础上建设仓库m个,为了使得每家餐馆都能最快的调用食物,要求每家餐馆到距离自己最近的仓库的距离之和最小,并输出仓库所在餐馆的序号以及所服务的餐馆范围(到该仓库取货物的餐馆)解题思路:dp[k][i]表示前i个餐馆用k个仓库服务的最优解,dis[i][j原创 2013-09-28 11:16:11 · 2527 阅读 · 0 评论 -
uva 11584 - Partitioning by Palindromes(dp)
题目链接:uva 11584 - Partitioning by Palindromes题目大意:给出一个字符串,问说最少可以划分成几个回文串。解题思路:dp[i]表示从1到第i个字符最少可以划分为几个回文,dp[i] = min{dp[j-1]+1 | judge(j,i) } ,judge函数判断从j到i是否可以形成回文串。#include #includ原创 2014-02-24 22:34:34 · 1104 阅读 · 0 评论 -
uva 10564 - Paths through the Hourglass(dp)
题目链接:10564 - Paths through the Hourglass题目大意:给出一个沙漏形状的2(n - 1)行矩阵,并给出一个总全值和每个坐标的权值,每个位置可以走向下一行与它相邻的两个或一个位置(参见题目中的图),请找出有多少调路径上的权值和等于给定的总权值,并输出字典序最小的一条路径的起始位置 和方案。解题思路:就是数字三角的进化版, 只是本题需要记录每原创 2013-09-25 09:10:40 · 1901 阅读 · 0 评论 -
uva 1427 - Parade(dp+单调队列)
题目链接:uva 1427 - Parade题目大意:F城由n+1各横向路和m+1个竖向路组成。你的任务是从最南边的路走到最北边的路,使得走过的路上的高兴值和最大(高兴值可能为负值)。同一段路不能经过两次,且不能从北往南走。另外在每条横路上所花费的时间不能超过k。解题思路:dp[i][j][0]表示走到(i,j)这个位置的最大开心值和,dp[i][j][1]表示从左边移动到原创 2014-02-26 13:15:22 · 1592 阅读 · 0 评论 -
Codeforces 390C Inna and Candy Boxes(dp)
题目链接:Codeforces 390C Inna and Candy Boxes题目大意:给出n,k和w,然后给出n个礼物盒的状况,‘1’表示有糖果,‘0’表示没有糖果,然后给出w次询问,每次询问将[l,r]区间变成标准情况需要几步,标准情况为l-1+k,l-1+2k....的盒子有糖果,其他在该区间上的盒子没有糖果。解题思路:因为k不会大于10,所以可以先进行预先处理,原创 2014-02-13 18:42:08 · 1768 阅读 · 0 评论 -
uva 12265 - Selling Land(dp)
题目链接:uva 12265 - Selling Land题目大意:给出一个图,要求以每个位置为右下角,找出最大周长的矩阵,然后统计所有周长的矩阵。解题思路:首先可以维护每个位置向上的最大生长高度,然后按照每一行去枚举列,维护一个单调队列,使得高度递增,以及长度最优(在添加的那步进行控制)。对于每个新的长度,将比它高的直接忽略。#include #includ原创 2014-02-16 21:26:35 · 1862 阅读 · 0 评论 -
uva 11825 - Hackers' Crackdown(dp+子集枚举)
题目链接:uva 11825 - Hackers' Crackdown题目大意:黑客入侵了一个包含n台电脑的网络,每台网络上都运行了1~n,n中服务,现在给出每台电脑所直接连接的电脑。黑客可以对电脑安装一种病毒k(一台电脑只能安装一种),会导致与该台电脑直接相连的(包括本身)电脑无法提供k种服务,当网络中没有电脑可以提供k种服务时,则称该种服务瘫痪。求最多可以使几种服务瘫痪。原创 2014-02-17 18:41:05 · 1723 阅读 · 0 评论 -
uva 11552 - Fewest Flops(dp)
题目链接:uva 11552 - Fewest Flops题目大意:给定一个k,和一个字符串,字符串长度是k的倍数,将字符串分成len/k份,每一份中的字母可以任意交换位置,现在要求每一份中的字母重排之后,字母块数最小。解题思路:dp[i][j]表示在第i/k份以j字符结尾的字母块数。#include #include #include using na原创 2014-02-18 23:33:40 · 1391 阅读 · 0 评论 -
uva 1424 - Salesmen(dp)
题目链接:uva 1424 - Salesmen题目大意:给定一个包含n个点的无向图和一个长度为L的序列A,要求修改尽量少得数,使得序列中的任意两个相邻数相等或者在途中相邻。解题思路:dp[i][j]表示说长度为i且最后一个数为j的情况需要修改最少几次。dp[i][j] = min(dp[i][j], dp[i-1][k] + (j == A[i])?1:0));原创 2014-02-18 17:53:34 · 1383 阅读 · 0 评论 -
uva 12235 - Help Bubu(dp)
题目链接:uva 12235 - Help Bubu题目大意:给出n和k,表示说书架上有n本书,可以取出k次书,每次取出后可以任意放回书架中,书的编号为25~32八种,定义该书架的混乱程度为片段的个数。求出最小的混乱度。解题思路:dp[i][j][s][x],表示说在第i本书的时候,取出了j本书后,s剩下的书(二进制),x最后一本书的编号的情况下混乱度最小值。状态转移方原创 2014-03-01 13:47:50 · 1908 阅读 · 0 评论 -
uva 12260 - Free Goodies(dp+贪心)
题目连接:uva 12260 - Free Goodies题目大意:有n个糖果,每个糖果有p,j两个值,现在有两个人Petra和Jan,Prtra的取糖果方式是优先去p值大的j值小的;Jan取糖果的方式是尽量让自己开心值(取出糖果的j值和)大的情况下让Petra的开心值(取出糖果的p值和)也大,给出先选糖果的人,问说最后两人的开心值分别为多少。解题思路:可以将糖果按照p值大原创 2014-03-01 21:35:07 · 1605 阅读 · 0 评论 -
uva 11404 - Palindromic Subsequence(dp)
题目链接:uva 11404 - Palindromic Subsequence题目大意:给出一个字符串,要求删除某些字符,使得字符串变成回文串,要求回文串尽量长,且字典序最小。解题思路:dp,dp[i][j].val表示说从i~j的最大回文串长度,d[i][j].ans表示最优解。#include #include #include #include原创 2014-02-19 14:02:13 · 1674 阅读 · 0 评论 -
uva 1169 - Robotruck(dp+单调队列)
题目链接:uva 1169 - Robotruck题目大意:给出W和n,W表示机器人的限载重量,n表示有n个垃圾,然后给出n个垃圾的坐标和重量,要求清理垃圾按照垃圾的序号从小到大,机器人可以一次清理多个垃圾,只要重量不大于W,位于原点有垃圾桶,现在机器人从原点出发,要求清理完所有的垃圾的曼哈顿距离最小。解题思路:dp[i]表示清理完i号垃圾返回原点的最短曼哈顿距离,d[i]原创 2014-02-19 15:49:25 · 1633 阅读 · 0 评论 -
uva 1456 - Cellular Network(dp + 贪心)
题目链接:uva 1456 - Cellular Network题目大意:给出n和w,表示有n台机器,以及n个概率p[i](注意概率是p[i]/sum),现在将n台机器分成w组,按照题目中的公式计算值,要求找出最小的值。解题思路:先贪心,因为概率大的肯定放前面优,因为放后面乘的dp[i][j]表示第i个机器分成j组后的最小值,dp[i][j] = min{dp[k][j-1原创 2014-02-19 22:34:02 · 1281 阅读 · 0 评论 -
uva 11795 - Mega Man's Mission(dp)
题目链接:uva 11795 - Mega Man's Mission题目大意:给出n,表示有n个敌人,首先给出洛克人的武器(二进制数,表示可以杀死的敌人),然后给出n个敌人的武器,同样是二进制,杀死该敌人后可以获得他的武器,问说一共有多少种击杀顺序。解题思路:用二进制表示i说那些人被击杀,dp[i]表示这些集合的人被击杀有多少种顺序,然后h[i]表示获得这些人的武器后可以原创 2014-02-20 16:22:36 · 1442 阅读 · 0 评论