
线性DP
wtcl
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客多校三 Two Matchings(思维+dp)
题目:https://ac.nowcoder.com/acm/contest/5668/E 思路: 1.把数组从小到大排序 2.第一组:相邻的两个为一对 3.第二组:四个或六个为一小组,小组内两两为一对(有多种情况,从中选择一种最小的,这个组合是确定的) ,用dp来做。 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #原创 2020-07-19 12:19:13 · 227 阅读 · 0 评论 -
Codeforces Round #642 (Div. 3) E. K-periodic Garland(dp/贪心)
题意: 给你一个长度为 N 的 01 字符串和一个整数 K 每次操作你可以选择一个字符并改变其状态 现要使字符串中相邻 1 的距离为 K ,问最少需要操作几次 思路: 状态: dp[i][0] 表示第i项之前都符合要求且第i项为0 dp[i][1] 表示第i项之前都符合要求且第i项为1 状态转移: dp[i][0] 可以由dp[i-1][0] dp[i-1][1] 得到 dp[i][1] 两种情况: 1. i之前都为0; 2. 2.i-k为1,[i-k,i-1]都为0; 可以求一个前缀和pre[.原创 2020-05-15 10:37:45 · 242 阅读 · 0 评论 -
Mr. Young's Picture Permutations POJ - 2279
题目大意: 给出不超过5的k,有k行学生,当前行人数不超过后一行,每行学生有 ni 个,其中这些学生身高各不相同。 要求每一排从左到右身高递减,每一列从后到前身高递减。 设F[a1][a2][a3][a4][a5]表示各排从左边分别站了a1,a2,a3,a4,a5人时的方案数。 则可得转移方程。 其中我们可以发现,设计动态规划的转移方程,不一定要以如何计算出一个状态的形式给出,也可以考虑 一个已知...原创 2019-10-27 15:02:33 · 138 阅读 · 0 评论 -
FatMouse's Speed HDU - 1160
题目大意: 给你一个长度不超过1000的序列,然后每个元素包含两个数字和,现在要你找出一个最长的子序列使得这个序列满足按w递增而按v递减,然后输出长度和所选子序列顺序。 最长上升子序列 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using nam...原创 2019-09-07 17:07:55 · 73 阅读 · 0 评论 -
最少拦截系统 HDU - 1257
最长上升子序列 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int a[100010]; int dp[100010]; int main() { int n; while(scanf("%d",&am...原创 2019-09-07 16:34:49 · 102 阅读 · 0 评论 -
Tickets HDU - 1260
题意就是有n个人排队买票,每个人需要的时间是a[i] (1=< i <=N),但是现在可以两个人合买, 合买只能和前面一个人或者后面一个人合买,所用时间已知。 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace ...原创 2019-09-07 15:57:07 · 136 阅读 · 0 评论 -
免费馅饼 HDU - 1176
题意: 有一条路用坐标轴0到10表示,如上图所示,现在有个人站在5这个点,这时天上掉下馅饼,每一秒在不同位置掉下馅饼,但是这个人得反应能力有限,他只能接住他站得点以及他站的点得左右两个点,问最多能接住多少个馅饼。 思路: 有一个二维dp数组dp[i][j]表示在第i秒j位置能接住得最大馅饼,那么在0这个点就有dp[i][j]=dp[i][j]+max{dp[i+1][j],dp[i+1][j+1]...原创 2019-09-07 15:34:45 · 146 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping! HDU - 1087
题目大意 要求找到一个上升的子序列(不连续) 要求和最大 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define ll long long using namespace std; ll a[1010]; ll dp[1010]; int ma...原创 2019-09-07 14:40:36 · 115 阅读 · 0 评论 -
FatMouse and Cheese HDU - 1078
题意: 给你一个n*n的矩阵数列求出连续上升的序列和。其中移动的最大范围你所在的位置为k. 记忆化搜索+dp dp[i][j] 表示点(x,y)到结束的最大值。 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; ...原创 2019-09-06 17:26:51 · 87 阅读 · 0 评论 -
Phalanx HDU - 2859
题意:给你一个nn的字符矩阵,从中选出一个最大的子矩阵(mm)满足关于斜对角线(左下角到右上角)对称,求出这个矩阵的大小m; 我们可以用dp[i][j]表示当前位置到右上角这个子矩阵所能表示对称的矩阵最大值; #include<cstdio> #include<cstring> #include<algorithm> #include<iostream&g...原创 2019-09-06 16:42:13 · 113 阅读 · 0 评论 -
Milking Time POJ - 3616
题意: 总共 N 小时 , M 个产奶时段, 每次产奶后需要休息 R 小时。 给你 M 组数据, 每组数据 包括 :时段的开始时间点, 结束时间点, 时间段产奶量。 最长上升子序列变形 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using na...原创 2019-09-05 20:35:44 · 140 阅读 · 0 评论 -
Monkey and Banana HDU - 1069
题意:给出n中方块,每个方块有长宽高三个元素;每种方块有无数个;现在叠箱子,上面的箱子的长宽比下面的小;问能叠出的最大的高度; 首先按照长度从小到大排序,长度相等的,按宽从小到大排序。 然后对宽求最长上升子序列。 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm...原创 2019-09-05 20:12:19 · 87 阅读 · 0 评论 -
Ignatius and the Princess IV HDU - 1029
题意: 给你n个数字,让你求出出现次数为(n+1)/2 的数为多少。 两种方法(水) 1.直接排序 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int a[...原创 2019-09-05 19:20:24 · 75 阅读 · 0 评论 -
Max Sum Plus Plus HDU - 1024
题目链接:https://cn.vjudge.net/problem/HDU-1024 题意:给你n个数,让你找m组个连续序列,使m个连续序列最大(要求也是序列不重叠),输出m组序列和的最大值。 状态:dp[i][j] 前j个数m个连续序列,且必选j.(如果不这样定义不清楚前面的数是如何分组的) 转移方程:dp[i][j]=max(dp[i][j-1],dp[i-1][k])+a[j];(i-1&...原创 2019-09-05 17:14:04 · 85 阅读 · 0 评论 -
Common Subsequence POJ - 1458
最长公共子序列 若题目中没有说明一般 字串 连续 子序列 不连续 #include<cstdio> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; char s1[2100],s2[2100]; int dp[2100][2100]; int ma...原创 2019-09-04 22:42:17 · 77 阅读 · 0 评论 -
Help Jimmy POJ - 1661
dp首先要确定状态。 竖直方向所用时间是一定的,可以最后直接加Y。 刚开始想的是从高到低,发现这样无法确定状态。 从上往下,每一个平面有可能从上面多个平面推出。 而从下往上,一个平面只能从下面一个平面推出。 将0,Y都变成一个平面。 原问题 从第0层到n+1层的时间。 子问题 从第i层到n+1层的时间。 因为同一层有左右两个状态,所以需要二维数组。 状态:dp[i][0], 从i层左边到地面所用...原创 2019-09-04 20:02:31 · 162 阅读 · 0 评论 -
Making the Grade POJ - 3666
定义:dp[i][j]:前i个数不下降,第i个数凑成v[j]时的最小花费dp[i][j]:前i个数不下降,第i个数凑成v[j]时的最小花费 dp[i][j]=min(dp[i−1][k]+abs(a[i]−v[j]))(1<=i<=n,0<=k<=j<m) 但我们发现这样写过后是O(n3)的时间复杂度对于数据是过不了的,那我们要优化! 用一个minn来记录1到当前j的...原创 2019-09-03 19:08:16 · 162 阅读 · 0 评论