
动态规划
文章平均质量分 63
nagisa-kun
这个作者很懒,什么都没留下…
展开
-
P6046 纯粹容器 解题报告(组合数学)
有一些思维难度的组合数学。 题目链接:https://www.luogu.com.cn/problem/P6046 我们可以把这道题想象成这样一个模型:一根绳子,上面有n个点,每次操作,可以把任意两个相邻的点,也就是一段间隔合并掉。 考虑什么时候第i个容器会消失:也就是遇到一个比自己强的容器的时候。那么,显然考虑被左边或右边第一个比它大的容器打败(不一定是这个容器,因为这个容器可能在此之前就被更强大的容器打败。但是,由不等式的传递性,这个新上位的容器也能打败i)。记左边第一个比i强的位置为lil_ili,原创 2021-03-10 01:46:01 · 612 阅读 · 0 评论 -
P2634 [国家集训队]聪聪可可(树形dp)
这道题主要是要学习下这个树形dp的写法。 我一开始的想法是全部转移完再来统计贡献。然而,这就造成一个麻烦。 我们要统计的贡献是树中是权值和为3的倍数的路径个数。如果按照暴力思想,肯定是枚举两个点之后check这两点之间的距离是不是3的倍数。 然而,2e4的数据量不允许我们这样做。因此,考虑到这道题是树上问题,再联想到树上求距离还有一个重要的对象就是lca。所以,我们的状态设计其实就是:dp[u][i]表示到点u的距离模3为i的点的个数,相当于枚举了lca。 那么,考虑统计贡献:显然,贡献来自dp[u][0]原创 2021-03-09 00:40:07 · 148 阅读 · 0 评论 -
P1757 通天之分组背包 解题报告(分组背包板子题)
链接:https://www.luogu.com.cn/problem/P1757 分组背包的板子: for k in 所有的组{ for v in 背包容量{//反向,从最大到最小 for i in 所有物品{ if(i这件物品不在现在的分组) continue; 状态转移 } } } 之前前面的两个for,可以理解,其实就是一个01背包,只是在两层之后,多了一层,枚举在一定背包容量下,取该组内哪一件物品使得价值最大。 所以,其实他就是一个01背包,只是他把一整个组看作了01背包原创 2020-06-08 23:12:14 · 201 阅读 · 0 评论 -
牛客练习赛60补题(待更新)(A、二进制 B、思维 C、DP D、拓展欧几里得算法)
目录A、大吉大利B、三角形周长和C、操作集锦D、斩杀线计算大师 A、大吉大利 链接:https://ac.nowcoder.com/acm/contest/4853/A 一道挺普通的二进制题目,和洛谷之前做的谔运算有点像,可能还更简单一点。 #include <iostream> using namespace std; typedef long long ll; ll counter...原创 2020-03-28 23:48:14 · 204 阅读 · 0 评论 -
HDU - 2089 不要62 解题报告(数位dp)(入门题)
目录题目描述思路分析完整代码 题目描述 https://vjudge.net/problem/HDU-2089 思路分析 数位dp第一题,方法是打表+按位求ans。 首先题目有点说不清楚,他求的应该是[m,n]闭区间的数字中符合条件的。 先说打表,我们定义一个dp矩阵,dp[i][j]表示i位数,以j为开头数字的符合要求的数的个数。比如:我们以求[0,324]中的数字个数为例子。我们需要处理一下信...原创 2020-03-24 14:24:39 · 456 阅读 · 0 评论 -
Arab Collegiate Programming Contest 2015 K Road Network 结题报告(bfs/dfs/树形dp)
目录题目描述思路分析AC代码树形dpdfsbfs 题目描述 链接:https://nanti.jisuanke.com/t/44347 题目还是有点难读懂的。但实际上就是求树的直径,算出不在直径上的路径的个数 思路分析 貌似是第一次接触树的直径。查了下方法,有三种,分别是: 两次bfs 两次dfs 树形dp 三种我都写了一次,感觉还是比较好掌握的的,以后加以熟练就是了。 贴个大佬博客:https:...原创 2020-03-22 10:31:32 · 200 阅读 · 0 评论 -
P1352 没有上司的舞会 解题报告(树形dp)
目录题目概述思路分析ac代码 题目概述 https://www.luogu.com.cn/problem/P1352 思路分析 看到上司的下属之间的关系很容易想到树形结构,那么,又和最值挂钩,那么想到的就是树形dp。那么,这里的可以进行比较的点就是:上司参加,下属就不能参加,下属参加,上司一定不能参加,因此,状态转移的时候我们就需要比较的是上司去和不去的情况,所以,我们把dp数组的第二维开为2:存...原创 2020-03-13 00:39:28 · 387 阅读 · 0 评论 -
POJ - 3107 Godfather 解题报告(树形dp)(链式向前星)
目录题目描述思路分析AC代码 题目描述 链接:https://vjudge.net/problem/POJ-3107 其实还是找树的重心。这道题和上一道题思路是一样的,但是写法完全不一样。为什么?接着往下看。 思路分析 这道题还是那个想法:求出每个点作为根节点的时候的最大子树节点数,通过dfs,分别计算出每一层的子树节点数,然后dp回去求上一层的子树节点数。但是这道题卡vector,所以需要用链式...原创 2020-03-10 22:39:56 · 220 阅读 · 0 评论 -
POJ - 2378 Tree Cutting 解题报告
目录题目大意思路分析AC代码 题目大意 链接:https://vjudge.net/problem/POJ-2378 情景说的有点复杂,但其实就是让你找出这棵树所有的重心节点。 思路分析 首先,我们了解下什么是树的重心: 对于一棵n个节点无根树,若有一点,当令该点为根的时候,最大节点数最少。也可以说成:删除这个点之后,各连通块的节点数最少,则这一点就是树的重心。 了解完重心的定义之后,我们再来看下...原创 2020-03-10 17:45:45 · 407 阅读 · 0 评论 -
力扣5339 二叉搜索子树的最大键值和 解题报告
目录题目描述思路分析ac代码 题目描述 链接:https://leetcode-cn.com/problems/maximum-sum-bst-in-binary-tree/ 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意节点的右子树中的键值都 大于 此节点的键值。 任意节点的左子树...原创 2020-03-09 11:02:35 · 516 阅读 · 0 评论 -
P1064 金明的预算方案解题报告(有依赖的背包)
目录题目描述思路分析完整代码 题目描述 题目:https://www.luogu.com.cn/problem/P1064 思路分析 一拿到题目看着以为是01背包,但是仔细一看,发现有主件和附件之间的关系,所以不能直接用01背包。后来去查了背包9讲,发现这是个有依赖的背包。大致思路如下:首先,我们需要对每一组主附件进行01背包,找出在一定金钱(背包容量)下的最大价值重要性积的和(好绕口。。。)。 ...原创 2020-03-02 22:46:52 · 180 阅读 · 0 评论 -
HDU - 3092 Least common multiple 解题报告(数论+完全背包)
目录题目描述思路分析完整代码 题目描述 题目:http://acm.hdu.edu.cn/showproblem.php?pid=3092 大概意思:给定一个数s和模m,将s分解为几个数相加的形式,求这几个加数的最小公倍数最大值%m的值。 思路分析 这道题我一开始是一道数论题,就想着:既然要最小公倍数的最大值,最大公倍数lcm=a*b/k(k=gcd(a,b)),那么,我们有限考虑的应该是k最小,...原创 2020-02-15 21:10:16 · 240 阅读 · 0 评论 -
HDU - 2844Coins 解题报告(dp 完全背包、多重背包)(二进制优化)
目录题目描述思路分析完整代码 题目描述 题目:https://vjudge.net/problem/HDU-2844#author=0 有中文翻译,就不解释了。 思路分析 从题目描述可以看出,这是一道完全背包的题目。 多重背包的特点就是:有多种物品选择,每种物品的数量是有限的。那么,这里就把多重背包按照我自己的理解写一下。 多重背包有三个维度:物品种类、物品数量、背包容量。基本的做法是,建立一个二...原创 2020-02-14 17:00:12 · 334 阅读 · 0 评论 -
HDU - 1257 最少拦截系统解题报告(贪心/dp)
目录题目描述思路分析贪心完整代码(贪心)dp完整代码(dp) 好像好几天没有写题解了,今天补一补 题目描述 题目:https://vjudge.net/problem/HDU-1257 中文题目,我就不多说了。 思路分析 这道题可以用贪心,也可以用dp。 贪心 可以这样想:有无数个防御系统,高度无限高,每次来一颗导弹,都去找高度比它高但又最接近的(>=中最小的)一个系统攻击,最后统计有多少个...原创 2020-02-13 13:06:39 · 305 阅读 · 0 评论