![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
Ziiyan
这个作者很懒,什么都没留下…
展开
-
UVA - 103 Stacking Boxes(DAG最长路)
题目大意:k 个 n 维图形,给出边长。对于 A、B 两个图形,若能找到任意一个顺序使得 A 的每条边都小于 B,则 A 可以嵌套在 B 里。问最多能嵌套几个,并输出嵌套顺序。 解题思路:边长排序一下就很容易判断能不能嵌套,把可以嵌套的两个图形做一条有向边,用临接矩阵表示即G[i][j] = 1,然后就是求 DAG 最长路。套一下小白的模板,其实不是很理解= = rearranged - 重新原创 2017-07-21 11:35:52 · 233 阅读 · 0 评论 -
HDU - 1069 Monkey and Banana
题目大意:给出一系列方块,要求上面的方块长宽都比下面的小,问最高能叠多高。每个方块可以翻转,并且个数不限。 解题思路:可以翻转意味着一组长宽高能有 6 种摆放方式,列出所有方式按照长宽排序,dp记录当前方块之前能够叠的最高高度。#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<stri原创 2017-08-31 11:10:22 · 146 阅读 · 0 评论 -
HDU - 1087 Super Jumping! Jumping! Jumping!(最长递增子序列)
题目大意:棋子要从 star 跳到 end,每个位置都有一个值,要求每次移动时值都递增,且不能返回,把 star 看作无穷小, end 看作无穷大,输出最大和。 解题思路:LIS 水过 dp 记录到达当前位置时最大和#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>原创 2017-08-31 16:41:40 · 206 阅读 · 0 评论 -
HDU - 1114 Piggy-Bank(完全背包)
题目大意:有一个小猪存钱罐,给出空和满时候的重量,并给出若干种面额的硬币大小和重量,个数不限,问装满小猪时,硬币最小总额是多少,若无法装满,输出impossible 解题思路:完全背包,dp 数组开小了 TLE 好几发……看了半天不知道哪里有问题 还以为会是越界什么的 居然是 TLE#include<iostream>#include<stdio.h>#include<algorithm>#原创 2017-08-31 19:17:09 · 176 阅读 · 0 评论 -
HDU - 1176 免费馅饼
题目大意:中文题 解题思路:列一个矩阵,把每秒的坐标情况都记录下来,然后从矩阵最后一行(即最后一秒)开始往前递推,输出初始位置 5 的馅饼数即可。#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#i原创 2017-09-01 11:53:36 · 194 阅读 · 0 评论 -
HDU - 1260 Tickets
题目大意:给出 N 组测试样例,每组样例第一行表示 k 个人,第二行表示每个人购票所花时间,第三行 k-1 个数表示相邻两人一起购票需要的时间。8 点上班,问几点能下班。 解题思路:对于每个人,都有自己买 s[i] 或者是和前一个人一起买(除第一个人外)d[i] 两种方式。dp 记录当前人购票时花费最少时间,状态转移方程dp[i] = min(dp[i-1]+s[i], dp[i-2]+d[i])原创 2017-09-01 11:58:23 · 213 阅读 · 0 评论 -
HDU - 1257 最少拦截系统(LIS最长递增子序列)
题目大意:中文题 解题思路:LIS 输出最长上升子序列的长度即可,除该子序列外的数字前均有比自身大的数字,都会被顺便拦截掉。理解这个之后就好做了~#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#i原创 2017-09-01 18:33:14 · 185 阅读 · 0 评论 -
UVA - 10131 Is Bigger Smarter?
详见 HDU - 1160 FatMouse’s Speed#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b))const int原创 2017-09-01 18:44:30 · 203 阅读 · 0 评论 -
HDU - 1160 FatMouse's Speed
题目大意:给出若干只老鼠的重量和速度,从数据中找出一组数据满足越重的老鼠速度越慢,数据量越大越好,输出个数和老鼠的序号,有多种答案,只需要输出一种 解题思路:先对这些数据排序(重量递增,重量相同时速度递减)然后递推 dp 记录包含当前老鼠时能够满足条件的数据最多有几个,path 记录满足条件数据的坐标,用于路径输出。感觉这题也是 LIS 的变型#include<iostream>#include原创 2017-09-01 18:42:43 · 175 阅读 · 0 评论 -
HDU - 1003 Max Sum(连续子序列最大和)
题目大意:给一组数,求最大连续子序列和。 解题思路:UVA - 507 Jill Rides Again(连续子序列最大和) #include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#define max(原创 2017-09-04 11:30:38 · 294 阅读 · 0 评论 -
POJ - 3616 Milking Time(LIS)
题目大意:n时间内产奶,m个时间段,每个段有 l,r,v 表示从 l 时到 r 时共可产奶 v,挤奶工每次挤奶必须挤完完整的时间段,且每次挤完需要休息 r 时,求可获得的牛奶最大值。 解题思路:n 并没有什么卵用……时间段按开始时间从小到大排序,然后套 LIS 多加一个判断条件,点像贪心#include<iostream>#include<stdio.h>#include<algorithm原创 2017-09-04 11:24:09 · 209 阅读 · 0 评论 -
UVA - 10405 Longest Common Subsequence (LCS最长公共子序列)
题目大意:给出两个字符串,找出最长公共子序列 解题思路:之前做了这题 UVA - 111 History Grading(LCS最长公共子序列) 类似的,就是两个字符串的长度不一样#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#define max(a,b) (原创 2017-07-22 11:02:53 · 265 阅读 · 0 评论 -
UVA - 674 Coin Change(完全背包)
题目大意:有 1、5、10、25、50 五种面额的硬币,给出一个数额,问有几种方式能够组成面额。 解题思路:每种硬币都有无数个,完全背包问题。 为了避免重复计算,外层循环表示当前使用的面额,从小往大枚举,一层层累计。#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>原创 2017-07-22 11:20:12 · 196 阅读 · 0 评论 -
动态规划
动态规划——最长公共子序列(LCS)&最长递增子序列(LIS)by sunshine_pbUVA - 111 History Grading(LCS最长公共子序列) UVA - 10405 Longest Common Subsequence (LCS最长公共子序列) 背包之01背包、完全背包、多重背包详解 by TankyWoo UVA - 674 Coin Change(完全背包)转载 2017-07-16 10:29:20 · 243 阅读 · 0 评论 -
UVA - 111 History Grading(LCS最长公共子序列)
题目大意:对于若干历史事件,给出标准答案顺序和学生回答的顺序,根据标准给同学打分。 有两种评分方式:1、和答案位置匹配一个得一分;2、任意几个事件(不一定连续),若互相前后顺序正确,最多有几个得几分 如标准答案是 1,2,3,4 同学回答是 1,3,2,4 根据第一种评分方式,1,4位置匹配,得2分 根据第二种评分方式,1,2,4 或 1,3,4 相应前后顺序 正确,得3分 本题中,输出原创 2017-07-18 23:25:06 · 281 阅读 · 0 评论 -
UVA - 10066 The Twin Towers(LCS最长公共子序列)
题目大意:有两个塔,用类似的石头堆成,现在要求取出一部分石头使得两个塔完全相同,同时要求塔尽可能高,输出剩余石头数量 解题思路:LCS #include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#include<string>#include<queue>#includ原创 2017-08-09 16:47:03 · 185 阅读 · 0 评论 -
POJ - 3186 Treats for the Cows
题目大意:给一组数,每次能从首或尾取出一个数,然后乘以当前次数,问如何取使得总和最大。 如:a1, a2, a3 第一次取首,第二次取尾,第三次取首,则和为 a1×1+a3×2+a2×3 解题思路:dp 记录每次取完当前数的最大和,i 表示第 i 次取首, j 表示第 j 次取尾,则 i + j 就表示取的次数。处理一下边界即可#include<iostream>#include<stdio原创 2017-09-04 10:25:24 · 180 阅读 · 0 评论 -
HDU - 1078 FatMouse and Cheese(记忆化搜索)
题目大意:n*n 棋盘,老鼠从(0,0)出发,可以上下左右移动吃奶酪,每次最多 k 步,且需要保证下一格奶酪比本格多,问最多能吃到多少。 解题思路:dp + 搜索 dp[][] = max(所有可以从当前点走到的点的dfs的结果集) 记得加上当前格子的值#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath原创 2017-09-04 10:34:52 · 169 阅读 · 0 评论 -
HDU - 2859 Phalanx
题目大意:给出一个字母矩阵,求最大的对称子矩阵的大小,对称轴左下到右上。 解题思路:枚举每个字母,判断上和右的字母是否相同,while 直到不同跳出。 dp 表示当前字母为子矩阵左下角时,对称矩阵的大小。#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#incl原创 2017-09-04 11:14:38 · 177 阅读 · 0 评论 -
HDU - 1159 Common Subsequence(LCS最长公共子序列)
题目大意:给出字符串 X 和 Y,输出最长公共子序列的长度 解题思路:LCS 水过#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>#define max(a,b) ((a)>(b)?(a):(b))#define min(a,b) ((a)<(b)?(a):(b原创 2017-09-01 18:58:39 · 237 阅读 · 0 评论