![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
MatrixYg
暂无
展开
-
【cf908D】New Year and Arbitrary Arrangement
1.题目链接。题目大意,给定k,a,b.现在构造一个字符串,每个位置有两种选择,a/(a+b)概率会选择'a',b/(a+b)会选择'b'.当ab这个子序列出现的次数大于等于k次之后就停止构造,问ab这个子序列出现的期望次数。2.还是比较有意思的一道题目,还是求期望,那么一般还是倒着dp.dp[i][j]表示出现了i个a,j个ab子序列的期望。倒着考虑时,转移式很好推出来。...原创 2019-11-21 17:03:56 · 242 阅读 · 1 评论 -
【P 3431】AUT-The Bus
1.题目链接。切一道水题睡觉~~~~。有中文翻译就不说题意啦。本来说去写BZOJ 4237.瞅了一眼,大概是个CDQ,没仔细想,明天再写。2.考虑dp[i]表示经过第i个点能够接到的最多的人,显然这个点只能由它的左下方转移过来。 DP[i]=max(DP[j])+p[i](jx<ix&&jy<iy)...原创 2019-11-07 22:50:25 · 156 阅读 · 0 评论 -
【HDU 4028】The time of a day
1.题目链接。题目大意:n个指针,他们的周期分别是[1,n]问这n个数中任选k个,(0<=k<=n)最小公倍数大于等于m的方案书有多少种。2.显然DP。简单推导一下DP转移:DP[i][j]代表前i个数中,lcm为j的方案数。(注意这里我们是没有考虑选区几个数的,因为没有必要,我们考虑的对象只是lcm,而不是几个数组成了这个lcm).然后就成了一个计数类的DP。DP[i][j]...原创 2019-05-07 17:41:14 · 243 阅读 · 1 评论 -
【HDU 5900】QSC and Master
1.题目链接。题目大意:给定一些点,每个点都有两个属性:key-value.现在可以做这样的操作,可以移除一些连续的点,条件是需要这些点的key不互质,那么得到的value是移除的所有点的value之和。现在求出这个最大的value值。2.对于区间[l,r]我们首先预处理这个区间是不是可以移除掉。区间[l,r]可以被移除的条件很容易考虑到:其实可以从三个区间转移过来。[l+1,r-1],[l+...原创 2019-05-15 20:29:56 · 149 阅读 · 0 评论 -
【HDU 5904】LCIS
1.题目链接。其实不是我们常规理解的LCIS,这里要求的是连续的公共字串,不是子序列。那就比子序列简单多了。#include<bits/stdc++.h>using namespace std;const int maxn = 1e5 + 5;int dp_a[maxn], dp_b[maxn];#pragma warning(disable:4996)int main...原创 2019-05-15 22:23:30 · 131 阅读 · 0 评论 -
【HDU 4283】You Are the One
1.题目链接。其实这个题目的细节很重要,题目大意,n个人出场一个活动,每个人有一个等待值,这个等待值会随着等待时间的增多而增多。具体的关系是D=(k-1)D0.k是这个人上台前需要等待的人数。现在有一个小屋子,我们可以把一些人暂时放在这个屋子里,改变他们的出场顺序,但是这个屋子是一个栈,先进后出。问你这样操作之后,如何安排使得所有人的等待值之后最小。2.开始没有认真读题,上去贪心WA。然后仔细...原创 2019-05-13 17:32:31 · 128 阅读 · 0 评论 -
【HDU 5927】Auxiliary Set
1.题目链接。题目大意就是给了一棵树,这棵树上的节点有两种类别,一种是重要的点,一种是不重要的点。然后现在有一个集合,这个集合里面的节点满足两条性质中的任意一条即可:(1)这个节点是一个重要的节点.(2)这个节点不是一个重要的节点,但是这个节点是两个重要节点的LCA。然后是m组询问,每组询问首先给出一个数t,然后给出t个点,这t个点是不重要的节点,对于每组询问,输出一下这个集合的大小(也就是元素的...原创 2019-05-29 14:41:47 · 208 阅读 · 0 评论 -
【HDU 5945】Fxx and game
1.题目链接。一开始想直接搜索过了,但是发现似乎不得行。然后dp可做,因为上一状态向下一状态的转移最多只有t+1个dp[i]=min(dp[i-1],dp[i-2]....dp[i-t])+1当k|x时,dp[i]=min(dp[i],dp[i/k]+1).所以这个状态数有限,单调队列维护一下前i-t个最值即可。#include<bits/stdc++.h>using na...原创 2019-07-14 11:30:18 · 154 阅读 · 0 评论 -
【HDU 6656】Kejin Player
1.题目链接。题目大意:在一个氪金游戏里,从第i等级升级到i+1每次升级需要花费ai的费用,但是即使花费了ai的费用,也只有pi的可能性升级成功,还有1-pi的可能性升级失败,如果升级失败,将会掉回第x等级,其中x<=i。现在询问从L升级到R的期望费用。2.这个题目其实是比较easy的,设dp[i]表示从i-1升到i花费的费用。因为有pi的可能性升级成功,所以期望的升级次数就是1/pi次...原创 2019-08-13 13:59:43 · 272 阅读 · 0 评论 -
【阶乘分解】
1.题目链接。给出一个正整数N(1<=N<=1e6),请给出N!在正整数下的唯一分解。2.对于每一个素因子p,1-n中间是p的倍数的有 n/p个,然后考虑p^2,是n/p^2个。这样dp一下: #include <bits/stdc++.h>using...原创 2019-08-16 13:38:33 · 163 阅读 · 0 评论 -
【HDU 1950】LIS的优化
1.一个十分无趣的问题,LIS的求法其实本来就应该是这么求,O(N^2)的求法和暴力有啥区别?大体思想就是保存以每个字符位最长上升子序列的最大值,然后直接和这个数组里面的值比较即可。由于这个数组本来就是有序的,所以没必要用优先队列,也没必要排序。直接lower_bound完事。#include<bits/stdc++.h>using namespace std;const i...原创 2019-05-08 16:41:05 · 171 阅读 · 0 评论 -
【POJ 1141】括号区间DP
1.题目链接。其实这个题目就是一般的区间DP,不过感觉输出还是需要一点技巧的。2.DP[i][j]表示区间[i,j]需要加的括号的最小的数量,那就分为两种情况讨论,s[i]与s[j]匹配的时候,s[i]与s[j]不匹配的时候。匹配的时候直接就是有dp[i-1][j+1]转移而来,不匹配的时候,枚举中间点k.寻找最小值。然后这里需要加一个flag数组来标记这个区间在哪里中断了。flag[i]...原创 2019-05-03 16:43:57 · 246 阅读 · 0 评论 -
HDU2709
1.题目链接。一个简单的计数DP。分奇偶讨论一下就OK,没有很大的思考量。代码如下:#include"stdafx.h"#include<iostream>using namespace std;const int N = 1e6 + 10;#define ll long long#pragma warning(disable:4996)const int mod =...原创 2019-01-22 12:32:06 · 174 阅读 · 0 评论 -
HDU2571
1.题目链接。一个经典的DP,但是需要注意一下初始化的问题,因为负数可能存在,所以可能会上来把DP数组初始化为0是不合适的,所以先把它初始化为一个绝对值很大的负数即可。代码如下:#include<bits/stdc++.h>#include<iostream>#include<algorithm>using namespace std;int a[...原创 2019-01-22 19:22:58 · 217 阅读 · 0 评论 -
【HDU1257】简单的DP
1.题目链接。网上的有贪心的题解,但是我没有想出来怎么贪心。仔细分析一下,其实这个就是在让我们找最长的不上升的子序列的条数。或者说一条不下降的子序列的长度。如何来理解这个问题呢?我想理解成不上升的子序列的条数这个应该是很显然的,但是怎么理解成一条不下降的子序列的长度呢》其实这个问题是从我们刚才的那个问题出发,对于这几条不上升的子序列,每个子序列的最小值组成了一条不下降的子序列。这样就好理解了,不管...原创 2019-02-06 17:20:07 · 196 阅读 · 0 评论 -
【HDU1081】最大子矩阵的和
1.题目链接。题目的大意就是给定一个矩阵,求出这个矩阵中的一个和最大的子矩阵。2.emmm,显然DP。我们肯定都写过HDU1003那个最大连续的子段和。这个题的解法其实差不多一个意思。我们可以把行压缩掉,怎么压缩?这样压缩:我们只考虑列dp[k]就是前k列的最大子矩阵的和。那么行我们这样处理:把每一行加起来压缩成一个数据。举例说明,比如我们有一个10*10的矩阵,我们首先考虑1*10,也就是1...原创 2019-02-21 23:10:56 · 168 阅读 · 0 评论 -
【HDU1160】一点点技巧的DP
1.题目链接。题目大意:给出一些老鼠的参数,每一行两个数据,第一个是老鼠的体重,第二个是速度,求出一组这样的老鼠,他们的体重在增加,但是速度在减小。尽可能是这个数量最多。输出这些老鼠的数量和对应的编号。2.就是一个LIS问题,但是这里我们需要记录中间信息并且输出,我们在输入的时候给每一个老鼠就加上编号,然后按照体重排序DP即可,至于信息的记录,我们可以采用并查集中的pre[i]=j,这个数组的...原创 2019-02-16 21:14:57 · 153 阅读 · 0 评论 -
【HDU1506】连续的最大矩形面积
1.题目链接。题目大意:给一个直方图,求出最大连续的矩形面积。emm。2.分析:其实很容易想到,我们可以从最高的的那个矩形开始枚举,看看它的左右分别能够到达哪里,把面积算出来,取最大。但是这样会T,因为这显然是N方的。但是这个思路没有错误,我们要做一点优化,就是加一些预处理的信息,我们把每个矩形能够达到的左右边界预处理出来,然后再枚举。这样就AC了。这里的主要问题就是如何预处理每一个矩形的左右...原创 2019-02-23 16:31:19 · 533 阅读 · 0 评论 -
【CH5101】LCIS
1.题目链接。求最长公共上升子序列。2.设F[i,j]表示A[1..i]与B[1..j]并且以B[j]结尾的两段最长公共上升子序列,那么我们可以发现这样的转移(1)A[i]==B[j]时 F[i][j]=max(F[i-1][k])+1,其中k满足1<=k<=j并且B[j]<A[i].(2)如果不相等:F[i][j]=F[i-1][j]这样我们三重循环就...原创 2019-03-21 16:53:21 · 199 阅读 · 0 评论 -
【CH0103】Hamilton路径
1.题目链接。众所周知,Hamilton路径问题是一个NP困难的问题。但是在数据小的时候还是可以做的。2.给一个n个点强连通图,求一种方案,使得经过所有的点一遍,并且路径之和最小。也叫做TSA(旅行商问题)。我们采用状压DP来解决。因为有n个点,每个点有两种状态,经过与不经过。所以所有点的状态就是pow(2,n).F[i,j]表示当前再j点是,整张图点的状态是i。转移方程:F[i][j]=mi...原创 2019-03-24 23:03:01 · 445 阅读 · 0 评论 -
【HDU2159】二维完全背包
1.题目链接。中文题就不说题意了,这显然是一个二维的完全背包问题,设dp[i][k]为忍耐度为i,在击杀第k种怪物获得的经验值的最大值。那么转移式:dp[i][k]=max(dp[i][k],dp[i-w[j][k-1]+v[j]).状态可以用前一个转移过来。那么第一层枚举忍耐值,第二层枚举怪兽的种类,第三层枚举击杀的数量,然后就是一般的背包问题了。#include<bits/stdc...原创 2019-03-18 18:58:26 · 238 阅读 · 0 评论 -
【HDU 3001】三进制压缩
1.题目链接。题目大意和哈密顿回路是一个意思,但是这里条件改变了一下,就是每个点最少访问一次,最多访问两次。那么我们使用二进制就无法再压缩这个状态,因为二进制只能表示访问过或者没有访问过,所以不能继续使用二进制,但是我们依然可以使用压缩的思想。这时我们就可以使用三个数来压缩这个状态,0,1,2表示访问了一次,两次,或者没有访问过。然后我们需要预处理一个信息:dig[i][j]表示状态为i的时候,第...原创 2019-04-23 14:08:35 · 223 阅读 · 0 评论 -
HDU1421
1.题目链接。中文题。这是一个很常规的DP,其实怎么DP题目已经告诉了,他是要求n个物品选k对,那么dp[i][j]就是前i个物品选j对。首先肯定是要对所有的数据排个序的,然后再找转移方程即可。2,转移方程的确定:其实这一类的转移方程也是很好找的:DP[i][j]:转移的条件就是i选和不选,假设i不选,那么就是前i-1个选j对,也就是DP[i][j]=DP[i-1][j].假设第i个选,那么这...原创 2019-01-20 13:15:30 · 768 阅读 · 0 评论