![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
线性 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 · 85 阅读 · 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 · 108 阅读 · 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 · 88 阅读 · 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 · 86 阅读 · 0 评论 -
找硬币 计蒜客 - T2959(递推 dp)
题目链接题意有一个无穷货币面值序列:bi, 要求这个序列的第一个硬币的面值 b1 = 1, 我们可以自定 b2 及往后所有硬币的面值,当 i>=2 的时候且 bi 是 bi-1 的倍数,现在我们有 n 个物品,每个物品的花费为:ai,求把所有的物品购买下来所需要的最小硬币个数是多少?在我们合理规划硬币的面值 bi 的情况下。思路挺不错的一题。。。虽然没有做出来 ╮(╯▽╰)╭当时在考虑状态转移的时候,一直找不到 到底使用哪个状态进行转移的,其实这题的状态转移是通过倍数关系去实现的,原创 2021-06-04 20:31:54 · 91 阅读 · 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 · 104 阅读 · 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 · 92 阅读 · 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 · 84 阅读 · 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 · 95 阅读 · 0 评论