基础dp
stormjing7
这个作者很懒,什么都没留下…
展开
-
HDU-5532 Almost Sorted Array (最长上升子序列 or 模拟)
传送门 Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 7512Accepted Submission(s): 1763 Problem Description ...原创 2018-07-15 10:45:30 · 191 阅读 · 0 评论 -
HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)
HDU 6447 YJJ’s Salesman 题目 给一个二维数组,从(0,0)走到(1e9, 1e9)。每次只能走右,下,右下,三个方向。其中只有通过右下走到特定给出的点(村庄)时才会获得分值。问最后走到终点最大分值。 分析 很明显的 DP 题目。状态转移题目都给出了。但是 1e9 很明显会爆。 想一下,题目让求最大分值,而最大分值只与特定的点有关。也就是说数组的列上如果没有村庄怎么走都没关系...原创 2019-08-21 18:05:40 · 200 阅读 · 0 评论 -
Gym - 102021C Coolest Ski Route(DAG 上动态规划模板题)
Gym - 102021C Coolest Ski Route 题目 给一个有向无环图,求最长路。 分析 dp[i]dp[i]dp[i] 表示从 iii 节点开始的最长路。 从 nnn 个点分别记忆化搜索即可。 #include <bits/stdc++.h> using namespace std; #define ll long long #define INF 0x3f3f3f...原创 2019-08-15 22:02:52 · 208 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track(模拟 || dp)
ACM-ICPC 2018 徐州赛区网络预赛 F. Features Track 题目 有 n 天,每天有一定量的点对,求点对连续出现最长的天数。 分析 两种方法, 用 pairpairpair 存点对,直接枚举每一天的每一个点对能往后连续多少天,连续的后面要标记一下,下次枚举后面的天,不枚举标记过的点对。 或者将点对用 mapmapmap 映射成数字,然后动态规划。 dp[i][j]dp[i][...原创 2019-08-15 21:54:48 · 214 阅读 · 0 评论 -
计蒜客信息学7月普及组模拟赛 - C 收获(逆向DP)
计蒜客信息学7月普及组模拟赛 - C 收获 题目 有 n 个地点,每个点有可能是果树或者亭子。初始有一个兴奋度 w,经过果树可以选择“收获” 一次,收获值为当前兴奋度 w∗a[i]w * a[i]w∗a[i],但是兴奋度会下降 k%k\%k%;经过亭子可以选择放弃 w∗a[i]w*a[i]w∗a[i] 的收获值,但是兴奋度会上升 c%c\%c%。问从 1 走到 n,能获得最大收获值? 分析 代码 ...原创 2019-07-13 17:59:44 · 498 阅读 · 0 评论 -
UVA - 116 Unidirectional TSP(单向旅行商问题)
UVA - 116 Unidirectional TSP 题目 给m行n列矩阵,从第一列任意位置开始向右走,每次走三个方向,走到最后一列最小权值是多少,并打印路径列号。 分析 每次三个决策,即三个方向,直接构建状态转移方程。 注意字典序最小和打印路径的问题。 #include <bits/stdc++.h> using namespace std; typedef long long...原创 2019-06-04 20:37:58 · 282 阅读 · 0 评论 -
UVA - 1347 Tour(双调旅行商问题)
UVA - 1347 Tour 题目 旅行商问题描述:平面上n个点,确定一条连接各点的最短闭合旅程。 题目按照x递增顺序给出,各点x不同。 分析 动态规划 题目说从最左端走到最右端,再返回最左端。可以想象成两个人同时从最左端沿着两条不同路径走到最右端,保证每个点走到一次,则他们两个的路径相加最短就是答案。 最难的就是定义状态,状态定义的好坏直接影响题目的解决 将题目给出的点按 x 大小编号 1 ...原创 2019-06-04 12:32:10 · 447 阅读 · 0 评论 -
UVA-1025 A Spy in the Metro(多决策dp)
uva-1025 A Spy in the Metro 题目 某城市的地铁是线性的,有n(2≤n≤50)个车站,从左到右编号为1~n。有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开。在时刻0,Mario从第1站出发,目的是在时刻T(0≤T≤200)会见车站n的一个间谍。在车站等车时容易被抓,所以她决定尽量躲在开动的火车上,让在车站等待的总时间尽量短。列车靠站停车时间忽略不计,且M...原创 2019-05-29 22:44:33 · 144 阅读 · 0 评论 -
1051 最大子矩阵和(dp)
1051 最大子矩阵和 题目 分析 这题用 n3n^3n3的复杂度过的,很暴力。 对于大矩形,枚举左右边界,之后转化为最大字段和做。 例: 1 2 3 4 5 6 7 8 9 枚举左右边界为:1, 2 就变为求 3, 9, 15 的最大字段和 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define d(x) cout <&...原创 2019-05-27 22:41:26 · 178 阅读 · 0 评论 -
51nod 1002 数塔取数问题
题目 求从第一层走到最低一层经过权值最大多少 分析 状态转移:dp[i][j] += max(dp[i-1][j], dp[i-1][j-1] 可以用一个pre数组存一下dp[i-1][j-1],空间优化。 #include <bits/stdc++.h> #pragma GCC diagnostic error "-std=c++11" #define d(x) cout <&...原创 2019-05-13 19:56:32 · 119 阅读 · 0 评论 -
最小编辑距离
51nod1183 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->g) 所以kitten和si...原创 2019-04-26 22:12:41 · 265 阅读 · 0 评论 -
51nod 1134 最长递增子序列
分析:LIS模板题,注意要用nlog(n)nlog(n)nlog(n)的dp,即dp[i]代表长度为i的LIS序列最小结尾值。 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define d(x) cout << (x) << endl #pragma GCC diagnostic error "-std=c...原创 2019-04-25 20:04:44 · 148 阅读 · 0 评论 -
HDU - 1069 Monkey and Banana(LIS变形)
题意: 给你n种长方体,每种长方体有三个参数长宽高,每种数量不限,现在让你将长方体摞一块,要满足上方长方体的长和宽严格小于下方的,求最大高度。 分析: 这道题其实就是最长递增子序列LIS的变形,首先将同一个长方体不同摆放视为不同的,也就是一个长方体有6种方式,之后按长宽排序,接着就是求LIS的模板了,只要将递增改为递减即可,注意状态 转移方程: dp[i]=max(dp[i],dp[j]+blo...原创 2019-04-09 21:19:01 · 216 阅读 · 0 评论 -
HDU - 1024最大m段字段和
题意: 给你n个数,选m个子段,各个子段连续且不相交,长度可以为1,设maxn为各个子区间的和,求最大的maxn。 分析: 设dp[i][j]代表 j个数选取 i 个子段 ,maxn最大的值; 得状态转移方程dp[i][j]=max(dp[i][j−1],dp[i][j−1]+a[j],dp[i−1][k]+a[j](0<k<j)dp[i][j] = max(...原创 2019-04-09 15:15:35 · 368 阅读 · 0 评论 -
51nod1006最长公共子序列LCS
输出路径的过程 结合dp数组和代码一看就懂了 a b d k s c a b a 1 1 1 1 1 1 1 1 b 1 2 2 2 2 2 2 2 c 1 2 2 2 2 3 3 3 i 1 2 2 2 2 3 3 3 c 1 2 2 2 2 3 3 3 b 1 2 2 2 2 3 3 4 a 1 2 2 2 2 3 4 4 经典的dp题,关键题目让输出最后的公共序列,可以...原创 2019-04-05 22:30:43 · 208 阅读 · 0 评论 -
51nod 1049 最大子段和
1049最大子段和 基准时间限制:1秒 空间限制:131072KB 分值:0难度:基础题 收藏 关注 N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。 Input &l...原创 2018-10-15 22:03:53 · 123 阅读 · 0 评论 -
51nod-1007正整数分组(简单dp)
传送门 1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 将一堆正整数分为2组,要求2组的和相差最小。 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。 Input 第1行:一个数N,N为正整数的数量。 第2 - N+1行,N个正整数。 (N &amp;amp;lt;= 100, 所有正整数...原创 2018-10-23 21:41:11 · 221 阅读 · 0 评论 -
SPOJ AMR11A Magic Grid(dp)
题目链接 : http://www.spoj.com/problems/AMR11A/ 题目大意:给出一个r * c大小的方格二维图,走到每个方格上需要加上上面的值,从左上角开始走, 规定只能往下右两个方向,要求全程值都大于零,求最开始最小值。 分析:倒着dp,开一个二维数组dp[r][c],dp[i][j]表示走到i, j位置所需最小值,可以得到初等关系: ...原创 2018-07-09 20:37:50 · 239 阅读 · 0 评论 -
The Preliminary Contest for ICPC Asia Shanghai 2019 F. Rhyme scheme (DP + int128)
The Preliminary Contest for ICPC Asia Shanghai 2019 F. Rhyme scheme 题目 题意很绕,其实大致就是给你 n 个数,让你划分集合,例如 n = 3; 集合划分为 :(一共有 5 种) 分析 代码 ...原创 2019-09-16 16:27:19 · 835 阅读 · 0 评论