![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DP
文章平均质量分 84
1
Gh0st_Lx
ACMer蒟蒻 / 北航研0
展开
-
第46届ICPC东亚洲区域赛(昆明)B Blocks题解
特此声明:该文章中的代码和解法均来自博主cup-pyy,我只是对其代码添加了详细注解,以及部分思路的详细化,原文链接见:这里二维平面转为一维注意我们最多含有22个坐标,但是实际上只会有21*21个格子如何判断二维平面中的格子数量全部染黑?一维情况状态压缩十分容易,二维的情况将若干个一维拼接即可 bitset<500> t; //二维平面转换为一维 //虽然22个坐标 // 21 * 21个格子看看是否都能染满 .原创 2022-04-25 19:07:33 · 511 阅读 · 0 评论 -
NC601寻找520(DP)
题目陈述大意:给定一个字符串仅由’5’、‘2’ 、‘0’ 和‘?’组成,其中’?'可以代表任何一个字符,所有可能的字符串中,位置不同的为 “520” 的子序列共有多少个?算法一:朴素算法算法思路最暴力的想法,直接枚举“520”的所有可能第一层循环枚举5和?,第二层枚举2和?,第三层循环枚举0和?当然,此处枚举时,要注意’2’的位置一定得在‘5’的后面,‘0’得在‘2’的后面代码实现typedef long long LL; //简化声明定义long long class Solutio原创 2021-09-06 16:37:18 · 145 阅读 · 0 评论 -
Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))
D1 题题目陈述题目大致就是对于1 n1~n1 n每个位置都可以转移到比他小的位置,两种转换方式,一种是直接转移1−(n−1)1 -( n-1)1−(n−1),一种是转移到⌊nz⌋,z∈[2,n]\lfloor \cfrac{n}{z}\rfloor,z \in [2,n]⌊zn⌋,z∈[2,n],有n个位置,总有有多少种方案,答案取模m算法思路既然涉及到向下取整,又有区间,这不很显然?整除分块!!dp的思想来看,1−(x−1)1-(x-1)1−(x−1)的任何一个状态原创 2021-08-25 11:02:11 · 511 阅读 · 5 评论 -
NC632 牛牛摆木棒
题目陈述大意:定义波浪形序列为:序列中间的每个数都大于他的相邻的数或者小于他相邻的数。大小定义为字典序大小,求长度为n的序列中第k个波浪型的序列。算法一:朴素算法算法思路一个很显然的思路,就是暴力枚举,字典序递增算出每一个序列,直到第k个开一个vector来记录当前的序列,第i层代表当前要填写的是第i个数字,那么递归边界就是n+1层(前面n个数字都已经填写完毕)那么我们该如何按字典序搜索?对于同一个位置填写的i,下一个位置如果填写的下降的,显然比上升的字典序来的小,所以应该先搜索下降的,再搜索原创 2021-07-15 22:55:19 · 220 阅读 · 0 评论 -
JZ30 连续子数组的最大和
目录题目陈述算法1:暴力做法算法思路代码实现算法2:前缀和优化算法思路代码实现算法3:动态规划算法思路优化算法(空间复杂度)动画演示代码实现C++python题目陈述题目大意:给定一个有正数有负数的数组,求解连续的一段的元素的和的最大值算法1:暴力做法算法思路枚举左右端点,然后计算这个区间的总和now,跟ans比较,如果比ans大,则更新ans,最后循环结束返回ans时间复杂度O(n3)O(n^3)O(n3),空间复杂度O(1)O(1)O(1)代码实现class Solution{p原创 2021-06-18 21:32:44 · 99 阅读 · 0 评论 -
21山东省赛热身赛B(Fib[i]/(2^i))(矩阵快速幂)
题目点这里算法思路公式推不出来,只能推矩阵了因为F(i)=F(i−1)+F(i−2)F(i)=F(i-1)+F(i-2)F(i)=F(i−1)+F(i−2),设原来的数列为f(i),则f(i)∗8=f(i−1)∗4+f(i−2)∗2f(i)*8=f(i-1)*4+f(i-2)*2f(i)∗8=f(i−1)∗4+f(i−2)∗2,即f(i)=f(i−1)2+f(i−2)4f(i)=\cfrac{f(i-1)}{2}+\cfrac{f(i-2)}{4}f(i)=2f(i−1)+4f(i−2)因原创 2021-05-17 11:21:30 · 110 阅读 · 0 评论 -
(0,1移动匹配)CF1525D(区间dp)
题目CF1525D:点这里题目大意:给定一个0、1序列,1代表位置被人占领,0代表没有人,要将原先的1全部移动到0的位置,并且原来被占领的位置不能有人,i移动到j的花费是abs(i-j),求最小的总花费算法思路定义状态,首先f[i][j]f[i][j]f[i][j]代表,前j个零中已经有i个i匹配的最小话费,将1的位置全部放在a数组里面(递增),将0的位置全部放在b数组里面(递增)状态初始值全部都为inf(无穷大),f[0][i]f[0][i]f[0][i](i from 0 to size(原创 2021-05-17 10:36:59 · 130 阅读 · 0 评论 -
ac1412. 邮政货车(插头DP)
题目原题链接:点击这里大致题意:求解n*4的方格中,哈密顿回路的数量思路表示的方法还是跟插头dp的左右表示法一样,这边(打表)注意起始状态和终止状态的合法性代码实现因为这题里面嵌套了高精度,所以建议先打低精度的正解,再打高精度#include<bits/stdc++.h>#include<unordered_map>#include<unordered_set>using namespace std;#define el '\n'#defin原创 2021-05-02 01:55:52 · 113 阅读 · 0 评论