动态规划
文章平均质量分 83
利用存储结构,储存特定状态的结果,并利用状态转移方程得到最优解的算法
盖乌咪·A·埃迪尔
这个作者很懒,什么都没留下…
展开
-
Codeforces-1689 C: Infected Tree 【树形动态规划】
题目传送门:Codeforces-1689 C: Infected Tree 有一棵树,它的根节点(111 号结点)被感染了。之后每一秒都会扩散到与感染结点相邻的结点。然而在扩散前,可以删除一个与感染结点相邻的结点(去掉所有的边,包括与孩子结点的边),问最多能保存多少结点。 首先贪心是不行的,因为这个树是分层的,如果有两个子树节点数量一样,还要递归地向下比较,会很麻烦。 那么我们考虑自下而上的 dpdpdp。设 dpidp_idpi 为以 iii 为根节点(被感染)子树,做题目要求的操作,所能存下原创 2022-07-04 10:34:42 · 529 阅读 · 0 评论 -
Codeforces-1700 D: River Locks 【动态规划、二分查找】
题目传送门:Codeforces-1700 直线上有一个长度为 nnn 的水坝,水坝上每个单位长度上有一个容器,第 iii 个容器可以存储 viv_ivi 的容器,每个容器上面有一个水管,一个水管打开后会向下面的容器注入 111 单位的水,当 iii 容器被注满水后,新增的水会瞬间转移到 i+1i+1i+1 容器中。若最后一个容器被注满水,再向该容器注水,多出的水会流入河流。 现在给 qqq 组询问,对于每组询问,会得到一个时间 ttt,问最少打开多少个管道,才能在 ttt 时间内将所有的容器注满。原创 2022-06-26 15:55:00 · 380 阅读 · 0 评论 -
Codeforces-1695 C: Zero Path 【动态规划、介值定理】
题目传送门:Codeforces-1695 C 给定一个 n×mn \times mn×m 的棋盘,棋盘中每个格子值为 111 或 −1-1−1。现在要从 (1,1)(1,1)(1,1) 走到 (n,m)(n,m)(n,m),问是否存在一条求和为 000 的路径。 首先,若 n+mn+mn+m 为偶数,那么走过的格子数量是奇数,显然是不存在求和为 000 的路径的。 我们观察一下若路径中一个结点改变会带来怎样的影响,显然,所在路径求和后的值的变化为 −2,0,+2-2,0,+2−2,0,+2。这意味原创 2022-06-23 22:40:07 · 282 阅读 · 0 评论 -
Codeforces-1692 H: Gambling 【动态规划、最大连续子段和】
题目传送门:Codeforces-1692 H 已经知道了之后 nnn 轮筛子的点数 {xi}\{x_i\}{xi},现在可以选择连续的几轮 x[l,r]x_{[l,r]}x[l,r],均猜点数为 aaa,每次猜中就可以把钱翻倍,但若猜错,则会减少一半,问如何选择 l,r,al,r,al,r,a,使得收益最大(初始金钱为 111)。 这道题虽然非常简单,但我觉得比较经典。原题解给的是遍历每一种 aaa,然后在值为 aaa 的地方设为 111,不为 aaa 的地方设为 −1-1−1,之后使用线段树等方原创 2022-06-19 15:00:27 · 258 阅读 · 0 评论 -
Codeforces-1673 C: Palindrome Basis 【动态规划】
Codeforces-1673 C: Palindrome Basis题目传送门:Codeforces-1673 C题目题目截图样例描述题目大意 镜像数为将里面的数字符反转后,与原数一样的数。给定一个数 nnn,问它可以由多少种不同的镜像数求和得到。当两个组合中某个数出现的次数不同时,认为它们是不同的组合。题目解析 首先我们注意到,输入的 nnn 很小,一共只有五位数,这意味着小于 nnn 的镜像数最多也就几百个。那么首先,我们可以暴力得到所有的镜像数。 之后我们使用 dpdpd原创 2022-05-31 01:51:47 · 223 阅读 · 0 评论 -
Codeforces-1677A: Tokitsukaze and Strange Inequality 【动态规划、区间数据结构】
Codeforces-1677A: Tokitsukaze and Strange Inequality题目传送门: Codeforces-1677A题目题目截图样例描述题目大意 给定一个长度为 nnn 的排列 p1,p2,⋯ ,pnp_1,p_2,\cdots, p_np1,p2,⋯,pn,目标是找到满足 pa<pc and pb>pd and a<b<c<dp_a < p_c \text{ and } p原创 2022-05-27 01:32:26 · 273 阅读 · 0 评论 -
Codeforces-1667: B Optimal Partition
Codeforces-1667: B Optimal Partition题目传送门:Codeforces-1667 B题目题目截图样例描述题目大意 给定一个长度为 nnn 的数组 aaa,希望将 aaa 切成几个连续的段。对于给定 l⋯rl \cdots rl⋯r 的一段连续子数组 al,al+1,⋯ ,ara_l, a_{l+1},\cdots,a_ral,al+1,⋯,ar,令 s=al+al+1+⋯+ars=a_l+a_{l+1}+\cdots+a_rs=al+al+1+⋯原创 2022-04-23 03:03:03 · 755 阅读 · 3 评论 -
Codeforces-1614 D: Divan and Kostomuksha
Codeforces-1614 D: Divan and Kostomuksha题目传送门(Easy Version):Codeforces-1614 D1题目传送门(Hard Version):Codeforces-1614 D2题目题目截图样例描述 对第一个样例,重排序后应为: [6,2,2,2,3,1][6,2,2,2,3,1][6,2,2,2,3,1]。其中 gcd(a1)+gcd(a1,a2)+⋯+gcd(a1,a2,⋯ ,a6)=14gcd(a_1)+gcd(a_1,a_2)+原创 2022-03-14 01:47:58 · 584 阅读 · 0 评论 -
Codeforces-1606 E: Arena
Codeforces-1606 E: Arena题目题目传送门:codeforces-1606E题目截图样例描述题目大意 给定 nnn 和 xxx, 意味着有 nnn 个英雄,对第 iii 个英雄,我们可以给他赋一个初始生命值 1≤ai≤x1 \le a_i \le x1≤ai≤x。在每一轮中,所有英雄都会打起来,即每一轮,每个英雄会受到除自身外所有英雄的一点伤害。问,有多少种赋值初始生命的情况(如果某第 iii 个英雄初始生命不同,则算不同的情况),打到最后,没有英雄存活。题目解析原创 2021-11-08 07:34:48 · 352 阅读 · 0 评论 -
Codeforces-1601 B: Frog Traveler
Codeforces-1601B: Frog Traveler题目题目传送门:codeforces1601B题目截图样例描述样例解释:第一个例子是从井底深3米处起跳,因此跳 a3=2a_3=2a3=2米,到达深1米的地方,掉落b1=1b_1=1b1=1米,于是起跳点变成了2米深的地方,之后再跳a2=2a_2=2a2=2米,就可以跳到地面上。题目大意 Gorf先生正在旅行,不幸的是在一次跳跃中它掉到了深 nnn 米的井里。现在它在井的底部,有很高的距离要跳。但井的表面的平滑程原创 2021-10-28 11:36:53 · 588 阅读 · 0 评论