C++动态规划专栏
文章平均质量分 81
关于动态规划的各种详细讲解和经典例题,让你秒懂DP
C20201018
这个作者很懒,什么都没留下…
展开
-
C++ 树形DP经典例题详解——二叉苹果树
引言这是十分经典的树形DP题,其转移方程很好想到,但有一些坑要注意题目描述有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点)。这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是 1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树:现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果...原创 2019-03-14 16:48:07 · 1376 阅读 · 0 评论 -
C++浅析斜率优化的推导过程
斜率优化推导第一次看可能会不懂,但多看几遍就会懂了,废话不多说,直接开始推导吧对于一个动态转移方程 dp[ i ] = dp[ j ] + M + ( sum[ i ] - sum[ j ] )^2 假设两个决策点 k , j ,且 j 比 k 更优(这里就是 dp[ j ] < dp[ k ] )那么就可以得出 dp[ j ] + M + ( sum[ i ] - ...原创 2019-01-11 14:14:03 · 877 阅读 · 1 评论 -
C++解题报告:电话网络——巧用树形DP
电话网络题目描述Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流。不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来保证任意两块草地间都存在手机信号。所有的N块草地按1..N顺次编号。 所有草地中只有N-1对是相邻的,不过对任意两块草地A和B(1 <= A <= N;1 ...原创 2019-03-07 16:51:22 · 693 阅读 · 1 评论 -
C++ 树形DP入门题详解——树的最大独立集
树的最大独立集题目描述对于一棵有N个结点的无根树,选出尽量多的结点,使得任何两个结点均不相邻(称为最大独立集)。输入第1行:1个整数N(1 <= N <= 6000),表示树的结点个数,树中结点的编号从1..N接下来N-1行,每行2个整数u,v,表示树中的一条边连接结点u和v输出第1行:1个整数,表示最大独立集的结点个数样例输入Copy(如果...原创 2019-03-06 13:35:20 · 858 阅读 · 0 评论 -
C++解题报告:邮局(IOI 2000)—— 如何用平行四边形不等式巧妙优化DP
目录题目描述题目解析思路详解代码邮局传送门题目描述高速公路旁边有一些村庄。高速公路表示为整数轴,每个村庄的位置用单个整数坐标标识。没有两个在同样地方的村庄。两个位置之间的距离是其整数坐标差的绝对值。邮局将建在一些,但不一定是所有的村庄中。为了建立邮局,应选择他们建造的位置,使每个村庄与其最近的邮局之间的距离总和最小。你要编写一个程序,已知村庄的位置和邮...原创 2019-01-02 15:05:11 · 1046 阅读 · 1 评论 -
C++ 浅谈平行四边形不等式优化DP
前言在区间DP中,第三重循环枚举分割点容易造成超时,那么又什么方法来优化呢?当然有,有一种叫做平行四边形不等式的玩意优化DP平行四边形不等式如果有两个区间满足 f[a][c]+f[b][d]<=f[b][c]+f[a][d],那么这个东东就是平行四边形不等式可以这样理解,交叉或包含的两个区间,a到c和b到d的值满足小于等于包含的两个区间(bc被包含于ad)还有就是...原创 2018-12-30 15:15:32 · 697 阅读 · 0 评论 -
C++ 动态规划 背包问题的提高 —— 简单的有依赖性背包问题-金明的预算方案
金明的预算方案 有依赖性的背包正解为树形DP,对本人来说从未学过,但还好,这道题不用,因为每个主件只有两个附件且附件没有自己的附件,那么只需要考虑五种情况 : 一. 只买主件 二. 买主件和第一个附件 三. 买主件和第二个附件 四. 买主件和两个附件 五. 什么都不买 那么这道题就...原创 2018-12-11 13:12:51 · 601 阅读 · 1 评论 -
C++ 【NOIP2011】计算系数——利用另类DP巧解
题目描述给定一个多项式(ax + by)^k,请求出多项式展开后x^n y^m项的系数。输入输入文件名为 factor.in。共一行,包含 5 个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。输出输出文件名为 factor.out。输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。样例输入Copy (如...原创 2019-02-27 15:03:08 · 689 阅读 · 0 评论