![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 77
miss_minor
坚持,请你坚持
展开
-
HDURevenge of Segment Tree(第二长的递增子序列)
HDURevenge of Segment Tree(第二长的递增子序列)题目链接题目大意:这题是求第二长的递增子序列。解题思路:用n^2的算法来求LIS,但是这里还要记录一下最长的那个序列是否有多种组成方式,如果>= 2, 那么第二长的还是最长的LIS的长度,否则就是LIS - 1;代码:#include #include #include using原创 2014-11-02 21:58:14 · 665 阅读 · 0 评论 -
uva10465 - Homer Simpson(完全背包)
题目:10465 - Homer Simpson(完全背包)题目大意:有个家伙很喜欢吃burger,现在有两种burger,然后给出吃这两种burger的时间,然后问你在指定的时间内,他能吃最多的burger的个数是多少。如果不能够用完的话,那么剩余时间就拿来喝水,要求喝水的时间尽量短。解题思路:完全背包。状态转移方程:dp【t】在t时间内能吃的最多的burger数目。dp原创 2014-08-12 23:28:30 · 573 阅读 · 0 评论 -
uva10564 - Paths through the Hourglass(递推)
题目:uva10564 - Paths through the Hourglass(递推)题目大意:给出这样的两个数塔,然后给出一个值,问你能否从这个数塔中找到路径,路径上的值之和等于这个数,输出这样的路径的总数,如果多条打印路径先挑开始的位置(0..n - 1)最小的,如果这样还是有多条,在比较后面的向左向右字典序最小的。解题思路:一开始两个数塔一个正着推,一个倒着推,结原创 2014-08-12 23:43:14 · 646 阅读 · 0 评论 -
UVA - 10913Walking on a Grid(记忆化搜索)
题目:Walking on a Grid题目大意:给出N * N的矩阵,每个格子里都有一个值,现在要求从(1,1)走到(n, n),只能往下,左,右这三个方向走,并且要求最多只能取k个负数,求这样的要求下能得到的走过格子的值之和最大。解题思路:记忆化搜索,但是这里要四维的,因为要记录方向,为了防止走回头的路,并且取了几个负数也要记录。然后就是dfs了。状态转移方程:dp【x原创 2014-08-12 23:17:15 · 521 阅读 · 0 评论 -
uva709 - Formatting Text(递推)
题目:uva709 - Formatting Text(递推)题目大意:给你一段文章,里面有很多的单词。要求你排版,按照题目给定的长度,并且要求每一行要以单词开头,单词结束。如果一行只有一个单词的话,就放在最开头。并且根据badness最小来排版。解题思路:这题知道是DP就不难想到状态,但是这题要考虑很多的细节问题,例如:一行只要一个单词的话,就要直接回车,不能再输出空格,原创 2014-08-26 10:56:48 · 802 阅读 · 0 评论 -
uva10154 - Weights and Measures(01背包)
题目:uva10154 - Weights and Measures(01背包)题目大意:给出一些乌龟的重量和力量,问怎样将这些乌龟一只放一只背上的堆起来,要求这样序列的乌龟越多越好,并且不要超出每只乌龟的负荷。解题思路:一开始,以为只要将乌龟的力量从大到小的排下序,然后根据力量找出最长的序列。结果发现这样的做法是不对的,因为这样你就默认了越前面的乌龟就放越底下,(但是其实原创 2014-08-26 14:53:29 · 548 阅读 · 0 评论 -
uva116 - Unidirectional TSP(记忆化搜索)
题目:uva116 - Unidirectional TSP(记忆化搜索)题目大意:给出一个数组,然后可以从第一列任意一行(i, 0)开始走,只能走三个位置(i + 1, 1) (i, 1), (i - 1, 0) 并且这里默认第一行和最后一行是相连着的,就是当i+ 1或着i - 1超出边界那么就到另一头的边界。最后输出字典序最小的路径。解题思路:记忆化搜索。dp【x】【y原创 2014-08-23 21:21:33 · 941 阅读 · 0 评论 -
HDU5024Wang Xifeng's Little Plot(记忆化搜索)
HDU5024Wang Xifeng's Little Plot(记忆化搜索)题目链接题目大意:给一张地图,#代表不能走的位置,.代表可以走的位置。现在要求找一条最长的路径,并且拐弯最多只能有一个并且还要是90度的。解题思路:记忆化搜索,dp[x][y][k][d] : x, y 代表坐标,k代表拐了k次90弯,d代表方向。因为这里最多只能转一次弯,而且还必须是90度的,那原创 2014-09-20 20:45:24 · 823 阅读 · 0 评论 -
uva103 - Stacking Boxes(DAG)
题目:uva103 - Stacking Boxes(DAG)题目大意:给出N个boxes, 并且给出这些箱子的维度,要求找一个最长的序列,能够使得下面的箱子一定能够有个维度序列大于上面的那个箱子的维度序列。例如:A箱子(2 3 4),B箱子(3 4 5),因为有个序列2 3 4 , 3 4 5使得B每个维度的值都大于A,所以A可以在B上面 。解题思路:DAG。将这些箱子哪原创 2014-08-23 21:11:20 · 767 阅读 · 0 评论 -
uva10201 - Adventures in Moving - Part IV(01背包)
题目:uva10201 - Adventures in Moving - Part IV(01背包)题目大意:一辆车要走D距离,然后它有个200L油箱,并且一开始有100L,现在给你一路上你会遇到的加油站,和这个加油站每升油的价钱,要求你最后到终点的时候油需要大于等于100L,问你加油最少的费用。如果到达不了目标地点就输出Impossible。解题思路:首先要先到达这个加油原创 2014-08-23 21:39:41 · 637 阅读 · 0 评论 -
uva147 - Dollars(完全背包)
题目:uva147 - Dollars(完全背包)题目大意:给出11种硬币,然后给出一个数字,问可以有多少方式由上面的给的硬币凑出。这里要注意精度误差,题目可能会给出20.005这样的数据,虽然我觉得这是不合法的数据,但是但是会给,并且还需要你向上取整。解题思路:完全背包。代码:#include #include const int N = 11;c原创 2014-08-23 21:15:26 · 781 阅读 · 0 评论 -
UVA - 10599Robots(II)(LIS)
题目: UVA - 10599Robots(II)(LIS)题目大意:一个N * M 的矩阵,上面有些格子上有垃圾,现在要求一个机器人从1,1的格子出发,往右或是往下走最终到达N * M各格子,沿途要收集最多的垃圾。现在将垃圾编号,要求输出最多能清理的垃圾并且输出这样的清理路线有多少条,输出其中字典序最小的那一条。解题思路:一开始还以为是简单的dp,结果输出发现路径多了好多原创 2014-08-22 11:08:29 · 893 阅读 · 0 评论 -
UVA - 10051Tower of Cubes(递推)
题目: UVA - 10051Tower of Cubes(递推)题目大意:给出N个正方体1-N,只有序号小的正方体可以放在序号大的正方体的上面,并且除了最底下的那个正方体,其他的正方体的底面要和它下面的正方体的上面颜色相同。问怎样组合才能使得用的正方体个数越多。并且输出其中的一种堆放方式。解题思路:一开始觉得是用DAG上的DP来做,结果状态开太多dp【N】【N】【M】(N原创 2014-08-11 10:18:21 · 565 阅读 · 0 评论 -
UVA - 531Compromise(LIS)
题目:UVA - 531Compromise(LIS)题目大意:给出两段话,找出里面最长的公共单词的子序列。并且输出任意一个子序列。解题思路:LIS。代码:#include #include const int N = 105;const int M = 35;char w1[N][M]; char w2[N][M];int f[N][N]原创 2014-08-22 11:24:16 · 950 阅读 · 0 评论 -
UVA - 357Let Me Count The Ways(完全背包)
题目:UVA - 357Let Me Count The Ways(完全背包)题目大意:给出N,问用1, 5, 10, 25, 50,这些硬币能够凑出N的方式有多少种。代码:#include #include const int N = 5;const int maxn = 30005;const int coin[N] = {1, 5, 10, 25, 50原创 2014-08-22 11:18:44 · 779 阅读 · 0 评论 -
uva607 - Scheduling Lectures(递推)
题目:uva607 - Scheduling Lectures(递推)题目大意:有N个主题,每个主题都有个讲课的时间。然后给定每节课的时间,并且要求一门课只能被选一次,并且选两门课以上的要选连续的。这样子每节课都有个真实的上课时间。根据这个和预期的上课时间求每节课的badness。要求在课最少的情况下。badness的和最小。解题思路:这题不难想到状态转移方程dp【i】【j原创 2014-08-26 15:09:24 · 630 阅读 · 0 评论 -
UVA - 10534Wavio Sequence(LIS)
题目:UVA - 10534Wavio Sequence(LIS)题目大意:给出N个数字,找出这样的序列:2 * n + 1个数字组成。前面的n + 1个数字单调递增,后面n + 1单调递减。解题思路:从前往后找一遍LIS,再从后往前找一遍LIS。最后只要i这个位置的LIS的长度和LDS的长度取最小值。再*2 - 1就是这个波浪数字的长度。注意这里的求LIS要用nlog原创 2014-08-13 21:55:53 · 887 阅读 · 0 评论 -
ZOJ Problem Set - 3822Domination(DP)
ZOJ Problem Set - 3822Domination(DP)题目链接题目大意:给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子,直到这个棋盘上的每行每列都有至少有一颗棋子。求要用的天数的期望。解题思路:先求出不同摆法的棋盘的概率,然后在和天数相乘就期望。我们将棋盘划分为四个部分:其中一部分为每行没列都至少有一个棋子。然后得出状态转移方程:原创 2014-10-14 11:29:12 · 910 阅读 · 0 评论 -
uva10405 - Longest Common Subsequence(LCS,最长公共子序列)
题目:uva10405 - Longest Common Subsequence(LIS,最长共同自序列)题目大意:找出两个字符串中的最长公共的子序列。解题思路:这类问题是第一次接触,不知道怎么做。百度了一下,发现了递推公式:dp【i】【j】:代表第一个字符串的前i个字符和第二个字符串的前j个字符比较能得到的最长的公共子序列。s【i】 == s【j】 ,dp【i】【j】原创 2014-08-06 21:11:34 · 1440 阅读 · 0 评论 -
HDU5045Contest(记忆化搜索)
HDU5045Contest(记忆化搜索)题目链接题目大意:有N个人组成一支队伍来答题,每个人答每道题的正确率都是已知的,但是有个要求:一直每个人答任何一道题目的时间都是1个小时,要求在任何时刻,任何两个人的答题累计时间都不能超过1.求这样答题的最优策略下最好的出题期望。解题思路:把所有的人答题的累计时间作为状态,用二进制数来表示。当这个二进制状态每个位都是1的话,那么就将原创 2014-09-28 21:10:48 · 1047 阅读 · 0 评论 -
UVA - 10604Chemical Reaction(记忆化搜索)
题目大意:UVA - 10604Chemical Reaction(记忆话搜索)题目大意:给出N支试管,每支试管中都放一种化学药物,现在要求这些试管两两反应,产生新的化学药物。最后会只剩下一支试管有药物。这样的过程中会放热和吸热,问怎样安排反反应的顺序可以使得释放的热量最少。解题思路:因为最多只有6种药品,并且最多十支试管,那么开个6维的数组,11*11*11*11*11还原创 2014-08-20 09:43:50 · 803 阅读 · 0 评论 -
uva662 - Fast Food(递推)
题目:uva662 - Fast Food(递推)题目大意:要求在同一条路上的N家快餐店,新建K个补助站点,每个快餐店和它的补助站点的距离之和最小。并且输出路径。解题思路:这题之前想了很久,但是却漏掉最重要的一点:一条路上【1,N】快餐店,建一个补助站的话,建在中间是最优的。那么对于一个补助站是这样的,对于两个补助站的话,就看这两个补助站提供补助的范围了。dp【k】【j】表原创 2014-08-17 20:41:57 · 828 阅读 · 0 评论 -
UVA - 10280Old Wine Into New Bottles(完全背包+剪枝)
题目:UVA - 10280Old Wine Into New Bottles(完全背包+剪枝)题目大意:现在要将旧酒装入新瓶中,每种瓶子都有最小最大的容量要求,然后给你L升酒,在给你N个瓶子,每中瓶子的规格说明也给你,每个种类的瓶子的供应是无限的,问怎样子安排这些酒才能使得剩余的酒最少。解题思路:这题是完全背包的题目,但是一开始就被这题的数据吓到,10^9ML,然后还原创 2014-08-30 10:45:46 · 667 阅读 · 0 评论 -
UVA10029 - Edit Step Ladders(LIS)
题目大意:UVA10029 - Edit Step Ladders(LIS)题目大意:给你一个按照字典序读入的单词,然后要求你找出最长的序列,要求这个最长的序列也要满足字典序,并且后一个是由前一个单词,由在任意的地方替换,增加,删除一个字符变换来的。解题思路:LIS。但是这里的O(n^2) 25000,超时。但是查找符合的单词有个规律,符合变换要求的单词的长度是有要求的,必原创 2014-08-30 10:58:22 · 649 阅读 · 0 评论 -
uva10271 - Chopsticks(递推)
题目:uva10271 - Chopsticks(递推)题目大意:给出N支筷子,值代表长度,现在要求在这些筷子中选出K对,每对筷子(A,B,C),badness(B- A)^2.要求总的badness最小。解题思路:选择相邻的筷子来做A和B,这样的badness肯定比较小。但是还要考虑C比较麻烦。最后看了大神的题接,筷子应该从长到短开始考虑,dp【k】【j】:前j根筷子凑出原创 2014-08-17 21:04:26 · 865 阅读 · 0 评论 -
uva11008 - Antimatter Ray Clearcutting(二进制+记忆化搜索)
题目:uva11008 - Antimatter Ray Clearcutting(二进制+记忆化搜索)题目大意:给出n棵树的坐标,每次砍树能够将在同一直线上的树一起砍掉,然后给出要求你至少砍掉的树的数量,问你要达到这个要求需要砍多少次。解题思路:因为这题的树的数量比较小(16), 并且只有砍和不砍两种选择,可以用二进制数将状态表示出来。大致思路是:每次都将当前状态下的还没原创 2014-08-17 20:29:14 · 609 阅读 · 0 评论 -
UVA - 825Walking on the Safe Side(dp)
题目: UVA - 825Walking on the Safe Side(dp)题目大意:给出一个n * m的矩阵,起点是1 * 1,终点是n * m,这个矩阵上有些点是不可以经过的,要求从起点到终点距离最短,并且不能走那种不能走的点,一共有多少种方式。解题思路:要求路径最短的话,每个点要不向右走,要不向下走。dp【i】【j】 = dp【i】【j + 1】 + dp【i原创 2014-08-15 23:29:53 · 776 阅读 · 0 评论 -
UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索)题目大意:给你四堆糖果,每个糖果都有颜色。每次你都只能拿任意一堆最上面的糖果,放到自己的篮子里。如果有两个糖果颜色相同的话,就可以将这对糖果放进自己的口袋。自己的篮子最多只能装5个糖果,如果满了,游戏就结束了。问你能够得到的最多的糖果对数。解题思路:这题想了好久,好不容易把状态想对了,结果脑子发热,又偏离了方原创 2014-08-15 23:49:30 · 1008 阅读 · 0 评论 -
uva10635Prince and Princess(LIS)
题目:uva10635Prince and Princess(LIS)题目大意:求最长相同公共子序列。解题思路:因为数据很大,62500不能用之前的那种求LIS的做法来做。可以将第一个路线的整数重新排个序(0...p),然后之后的那个路线因为要找相同的最长子序列,所以要将它原来的数字映射成第一条路线新的数字。这样之后就只需要找第二个路线的LIS就可以了。 nlog(n)原创 2014-08-13 21:43:57 · 1544 阅读 · 0 评论 -
UVA - 10313Pay the Price(完全背包)
题目:UVA - 10313Pay the Price(完全背包)题目大意:同样是凑钱的问题,只是询问的时候是要按照凑钱用的硬币个数的范围来做统计的。解题思路:这里零钱1--300,固定的。并且查询的N也是最大300,那么凑N最多的硬币个数就是N了,这里给定p,q说小于1100,所以只要大于300的就可以不用计算了,一定是0个。dp【i】【j】: 用j个硬币凑足i的种数。并原创 2014-08-15 09:46:27 · 819 阅读 · 0 评论 -
UVA - 10558A Brief Gerrymander(递推)
题目大意:UVA - 10558A Brief Gerrymander(递推)题目大意:给定一个100 * 100 的矩形,现在要求将这个区域划分,竖着的线已经给你划分好了,现在要求你在这个区域内再添加A个横着的线,1 100 这两条是一定要的,问怎样选择横着的线,能够使得选举区间最多。选举区间的条件:内部没有横竖线,并且有一个点在区间内部。注意:边界上的点也是算在内的,但是要防止重复原创 2014-08-15 10:18:33 · 716 阅读 · 0 评论 -
uva10626 - Buying Coke(记忆话搜索)
题目:uva10626 - Buying Coke(记忆话搜索)题目大意:给你3种价值的硬币, 1, 5, 10现在要求你取自动售卖机买可乐,一瓶可乐价值8,给你要求买的可乐的数目,和三种硬币的数目,问你最少需要投多少硬币。自动售卖机会根据你投入的钱来找零,可以的话找出的零钱硬币会最少。解题思路: 这题之前没有想到可乐的已经购买瓶数是隐含在剩余的硬币情况中,换句话说就是你买原创 2014-08-22 21:44:34 · 811 阅读 · 0 评论 -
UVA - 10131Is Bigger Smarter?(DAG上的DP)
题目:UVA - 10131Is Bigger Smarter?(DAG)题目大意:给出一群大象的体重和IQ,要求挑选最多的大象,组成一个序列,严格的体重递增,IQ递减的序列。输出最多的大象数目和这些大象的序列(其中一种就可以)。解题思路:DAG上的DP。和之前的一篇相似。uva437 - The Tower of Babylon(DAG上的DP)。就是将每两只大象满足上面原创 2014-08-09 22:44:26 · 786 阅读 · 0 评论 -
uva10911 - Forming Quiz Teams(记忆化搜索)
题目:uva10911 - Forming Quiz Teams(记忆化搜索)题目大意:给出N对点的坐标,然后将这2 * N个点分组,Xi代表第i组的点之间的距离,求sum(Xi)最小值。解题思路:这里的点最多16个,如果暴力求解的话16!,会超时的。这里的点取和不取可以用0和1表示,这样的话所有的状态可以用二进制数X来表示。dp【X】 = Min (dp【newx】 +原创 2014-08-06 20:10:43 · 720 阅读 · 0 评论 -
uva11258- String Partition(递推)
题目:uva11258- String Partition(递推)题目大意:给出一系列的数字,它是由很多int型的数构成的,就是中间没有加空格。所以现在问怎样拆分这些数,使得这些数之和最大。解题思路:这里要求是int型的整数,单个数的最大的值2147483647.dp【i】【j】代表这个数字串第i个字符到第j个字符能够得到的最大的和。原创 2014-08-05 20:36:15 · 739 阅读 · 0 评论 -
uva10401Injured Queen Problem(递推)
题目:uva10401Injured Queen Problem(递推)题目大意:依旧是在棋盘上放皇后的问题,这些皇后是受伤的皇后,攻击范围缩小了。攻击范围在图中用阴影表示(题目)。然后给出棋盘的现状,???3?4:在一个6*6的棋盘上,因为皇后是可以列向攻击的,所以一列只能放一个皇后,所以第一个?代表第一列的皇后放的行未知,这样3的意思就是第4列皇后在第三行,也就是确定了第4列皇原创 2014-08-05 09:41:51 · 573 阅读 · 0 评论 -
uva562 - Dividing coins(01背包)
题目:uva562 - Dividing coins(01背包)题目大意:给出N个硬币,每个硬币有对应的面值。要求将这些硬币分成两部分,求这两部分最小的差值。解题思路:先求这些硬币能够凑出的钱(0, 1背包),然后再从sum(这些硬币的总和)/2开始往下找这个值能否由这些硬币凑出。要注意的是,可以由前n个硬币组成那样也是可以组成的面值。代码:#include原创 2014-08-03 20:50:19 · 689 阅读 · 0 评论 -
uva10285 - Longest Run on a Snowboard(记忆化搜索)
题目:uva10285 - Longest Run on a Snowboard(记忆化搜索)题目大意:给出N * N的矩阵,要求找到一条路径,路径上的值是递减的,求这样的路径的最长长度。解题思路:记忆话搜索。因为要求最长的路径那么就需要将所有的这样的路径找出,但是直接dfs会超时的。对于同一个位置,从这个点出发的最长路径长度是固定的。所以在找的时候就要将这个位置的最长路径原创 2014-08-03 20:42:59 · 1274 阅读 · 0 评论 -
uva10130 - SuperSale(01背包)
题目:uva10130 - SuperSale(01背包)题目大意:超市甩卖。有n件商品,每件商品有对应的价值和重量。有一个家族准备去超市买东西,每个人最多每种甩卖商品只能买一件,可以拿很多不同的商品但是要能拿得动。给出每个人能拿得动的最大重量,问这样的一个家族取采购能够得到的最大的价值。解题思路:01背包。 dp【j】 = Max (dp【j】, dp【j - W】 +原创 2014-08-03 20:03:54 · 755 阅读 · 0 评论 -
uva674 - Coin Change(完全背包)
题目:uva674 - Coin Change(完全背包)题目大意:给1 5 10 25 50 这5中面值的硬币,然后给出N,问用这些钱组成N的不同方式数目。1 5 和 5 1 表示同一中,顺序不同算相同。解题思路:完全背包。 状态方程:dp【j】 += dp【 j - v【i】】;代码:#include #include const int N =原创 2014-08-03 19:57:12 · 779 阅读 · 0 评论