线性 DP
文章平均质量分 58
.
做一只大熊猫
让优秀成为一种习惯!
展开
-
Clarke and problem HDU - 5464(dp 类似背包转移)
题目链接 题意 给我们 n 个数的,我们可以从中选择任意个数把这些数的值加起来,要求这个数是 m 的倍数,问我们组成的数字是的倍数是 m 的方案数, 注意一个也不选组成的数是 0 也算一种合法方案。 n <=1000, p<=1000. 思路 一看到组成的数是 m 的倍数就要明白我们可以在 dp 的状态中用一位 去枚举余数, 其实 dp 方程很容易就可以猜出来:dp [i][j] 表示前 i 个数从中选择一些数字的和是 % m 的余数是 j 的方案数,那么答案就是 dp [n][0] 了原创 2021-06-08 20:23:43 · 89 阅读 · 0 评论 -
Good or Bad LightOJ - 1051(递推 dp)
题目链接 题意 给我们一个有小写字母和‘ ?’ 组成的字符串,我们可以把 ?替换从任意小写字母, 如果不论我们怎么替换,这个字符串都会包含连续的 3 个元音字符或 5 个连续的辅音的话,这个串就是一个 bad 串。 如果不论我们怎么替换,这个字符串都不会包含连续的 3 个元音字符或 5 个连续的辅音的话,这个串就是一个 good 串。 否则是一个 mixed 串, 现在问我们 s 是那个类型的串? 思路 设 f1 [i][j] 表示在 i 个位置为结尾,有 j 个连续元音字符的这种情况是否存在, 设原创 2021-06-08 19:49:33 · 113 阅读 · 0 评论 -
Brush (III) LightOJ - 1017(递推 dp)
题目链接 题意 在一个矩阵网格中的某些网格中有灰尘需要打扫,问每次可以选择 w 行进行打扫、清除这 w 行中的所有灰尘,问进行 k 次打扫之后最多可以清除的灰尘数量是多少? 思路 dp [i][j] 在第 i 个灰尘为终止行出打扫 j 次所能清除的最多灰尘数。 然后暴力枚举 i、j 进行状态转移就行了 代码 #include <bits/stdc++.h> using namespace std; #define db double #define ll long long #def原创 2021-06-08 19:23:52 · 91 阅读 · 0 评论 -
Palindrome Sub-Array HDU - 4618 (简单 dp)
题目链接 题意 给我们一个 n * m 的矩阵,让我们求一个最大的 k*k 的子回文矩阵,输出最大的这个 k 是多少? 回文矩阵:每一行、每一列都是回文。 思路 暴力枚举子回文矩阵的位置(注意这个位置要枚举奇偶情况),并且在这个位置暴力判读回文矩阵的边长复杂度:O (300 * 300 * 300) 代码 #include <bits/stdc++.h> using namespace std; #define db double #define ll long long #defi原创 2021-06-08 19:13:52 · 114 阅读 · 0 评论 -
找硬币 计蒜客 - T2959(递推 dp)
题目链接 题意 有一个无穷货币面值序列:bi, 要求这个序列的第一个硬币的面值 b1 = 1, 我们可以自定 b2 及往后所有硬币的面值,当 i>=2 的时候且 bi 是 bi-1 的倍数, 现在我们有 n 个物品,每个物品的花费为:ai,求把所有的物品购买下来所需要的最小硬币个数是多少?在我们合理规划硬币的面值 bi 的情况下。 思路 挺不错的一题。。。虽然没有做出来 ╮(╯▽╰)╭ 当时在考虑状态转移的时候,一直找不到 到底使用哪个状态进行转移的, 其实这题的状态转移是通过倍数关系去实现的,原创 2021-06-04 20:31:54 · 109 阅读 · 0 评论 -
Neighbor House LightOJ - 1047(线性 dp)
题目链接 题意 每个房子可以染成 r、g、b 三种颜色,染成对应的颜色有对应的花费。先在要 n 个相邻的房子染成颜色,并且要求相邻的房屋不能染成相同的颜色,问把所有的房子都染了合适的颜色之后的最小总花费是多少? 思路 设 dp [i][x] 前 i 个房子染完颜色,且第 i 个房子染成 x 颜色的最小花费。 dp [i][x] 可以从 dp [i][y] 进行转移,当(x != y)的时候 #include <bits/stdc++.h> using namespace std; #d原创 2021-06-01 10:24:29 · 131 阅读 · 0 评论 -
Derangement HDU - 4689(思维 dp)
题目链接 题意 对于一个 n 个元素的错排数组 a, 如果我们令 bi = a[i] - i > 0 ~?~ + : -||||| 现在给我们一个 n 个元素的 b [] 数组,问我们有多少个 n 个元素的排列 a [],要求 a 数组必须是错拍数组方案数。 思路 这题的 dp ,方法真的很奇特, 首先我设 dp 方程为:dp [i][j] 表示前对于字符串前 i 位置,我们把前 i 个位置中的 - 都已经选择数字填上了,还有 j 个 + 正号没有确定选择哪个数字填到对应的数字位置上, 这里我们原创 2021-06-01 09:48:36 · 117 阅读 · 0 评论 -
Monkey Banana Problem LightOJ - 1004(递推 dp)
题目链接 思路 经典的数塔题,直接从上往下递推就行了。。。 代码 #include <bits/stdc++.h> using namespace std; #define db double #define ll long long #define sc scanf #define pr printf #define fi first #define se second #define pb push_back #define m_p make_pair #define Pi原创 2021-05-31 16:29:06 · 89 阅读 · 0 评论 -
Love Calculator LightOJ - 1013(线性递推 dp)
题目连接 题意 给我们两个字符串 a、b , 问我们两个问题: 1. 输出 最短的字符串 s 的长度是多少,要求 a、b 都最为子序列出现在 s 中。 2. 在最短长度的基础上,s 字符串有多少种方案数。 思路 对于第一问最短长度模拟一下就可以得出:n + m - LIS (a,b), 其中 n = strlen (a), m = strlen (b) , LIS (a, b) 是 a、b 的最短公共子序列。 对于第二问求方案数:自己做的时候没有思路,但是盲猜了一下状态转移方程为:dp [x][i][原创 2021-05-30 19:35:50 · 98 阅读 · 0 评论