题目描述:求最长下降子序列的长度 in: 71 7 3 5 9 4 8 out: 4 解释:1 3 4 8/1 3 5 8 长度为四 这让我想到了hdu上导弹拦截那道题,是求最长上升子序列长度 其转移方程为: dp[i]=max(dp[i],dp[j]+1); 如果a[j]<a[i],那么dp[i] ...
分类:
其他好文 时间:
2020-02-02 20:09:27
阅读次数:
86
1.一个图论套路,结合之前的小知识(枚举子集) 例:Online judge 1268,Online judge 1396 询问一个图连通的方案数时,可令Dp一维为图是否连通,另一维是图的二进制表示(完全图可简化为点的个数),从而$Dp[x][0]$可通过$Dp[y][1]$来转移$y\subset ...
分类:
其他好文 时间:
2020-02-02 19:55:48
阅读次数:
90
1、买卖股票的最佳时机 I 注意:只能买卖一次股票,求最大利润 思路:需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。 状态转移方程:res = max(res, prices[i] - minpri);,res为前i天的最大收益 ...
分类:
其他好文 时间:
2020-02-02 19:53:38
阅读次数:
91
1.次短路问题 次短路问题和最短路问题类似,我们可以想到次短路由什么转移而来?对于当前一个点,其次短路只可能由两种情况转移而来: c++ include using namespace std; const int inf=0x3f3f3f3f; const int maxn=1e5+10; int ...
分类:
其他好文 时间:
2020-02-02 15:51:07
阅读次数:
53
树的直径 [TOC] 定义:树的直径为树中最远的两个节点的距离之和。在求树的直径时一般有两种方法:树形dp或则两个BFS(DFS也可以)。 1.树形dp求解树的直径 思路:由树的直径定义可知:其树形dp的状态转移方程为: $$ D[x]=max(D[y_i]+Edge(x_i,y_i)) $$ 其中 ...
分类:
其他好文 时间:
2020-02-02 15:30:26
阅读次数:
75
"Link" 我们考虑dp,设$f_{i,j}$表示进行$i$次操作后Mincut为$j$的方案数。 转移与背包类似,考虑枚举成对的$f$进行转移,对于$f_{i,j}$,我们枚举$f_{a,b},f_{c,d}$,使得$f_{i,j}$的$s$与$f_{a,b}$的$s$重合,$f_{a,b}$的 ...
分类:
其他好文 时间:
2020-02-02 15:27:45
阅读次数:
65
【思路】 我们 dp[i][j] 来表示合并第 i 堆到第 j 堆石子的最小代价。 那么状态转移方程为 dp[i][j] = min ( dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]); 其中, w[i][j] 表示把两部分合并起来的代价,即从第 i 堆到第 j 堆石子个 ...
分类:
其他好文 时间:
2020-02-02 11:35:27
阅读次数:
46
题目大意: 这个问题和 01背包 问题很相似,我们也可以依然采取 01背包 的状态定义 dp[i][j] 代表前 i 个物品 容量为 j 的背包的最大价值 那么状态转移方程也就出来了: dp[i][j] = max(dp[i][j],dp[i-1][j-k*v[i]]+w[i]) (k 可以为 0, ...
分类:
其他好文 时间:
2020-02-01 23:34:33
阅读次数:
68
最大连续和:给出一段序列,选出其中连续且非空的一段使得这段和最大。 stdin: 2 -4 3 -1 2 -4 3 stdout: 4 状态转移方程:dp[i]=max(dp[i-1]+a[i],a[i]) 如果dp(i-1)已经为负数,那么前i-1段就没有意义了,我们直接从a[i]重新开始取。 # ...
分类:
其他好文 时间:
2020-02-01 19:13:03
阅读次数:
57
这是labuladong的文章总结。 这是一题经典的DP问题,DP的框架为首先思考这个问题有什么状态,有哪些选择,最后根据情况穷举所有可行解。 这题的状态即为当前拥有的鸡蛋数k以及当前所在的楼层数n。选择是我们选择去哪一层楼扔鸡蛋。由状态和选择我们可以得到相对应的转移方程(因为有两个状态,鸡蛋数以及 ...
分类:
编程语言 时间:
2020-02-01 12:34:35
阅读次数:
99