直径meeting dp

区间DP小结(附经典例题) 转载

区间DP 转载自:原博客 一、定义 ​ 区间DP是线性动态规划的扩展,适用场景为每段区间的最优解可以通过更小区间的最优解得到。所以我们一般的解题思路都是先在小区间得到最优解,然后总结出递推公式,利用小区间的最优解求大区间的最优解。 二、实现伪代码 //mst(dp,0) 初始化dp数组 for(in ......
例题 区间 小结 经典

P4316 绿豆蛙的归宿(期望dp)

题目描述 给出张 n 个点 m 条边的有向无环图,起点为 11,终点为 n,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点。 绿豆蛙从起点出发,走向终点。 到达每一个顶点时,如果该节点有 k 条出边,绿豆蛙可以选择任意一条边离开该点,并且走向每条边的概率为 1/k。现在 ......
绿豆 归宿 P4316 4316 dp

CF960F Pathwalks | 线段树优化DP

题目 设$dp[x,w]$为以结点$x$为结尾,且最后一条边边权为$w$的最长路径长度。 考虑根据顺序加边,对于边$(u,v)$,更新 $$ dp[v,w] = \max_{w' < w}{dp[u,w']} + 1 $$ 对于每个节点,建一棵线段树,维护$dp[x]$,这样每次更新$dp[v,w] ......
线段 Pathwalks 960F 960 CF

DP 概论

对于一个题目,我们有暴力搜索算法。而 dp 就是尽可能将同一类的东西合并到一个状态上。 如何检查 dp 的正确性? 检查集合内部转移是否一致。 检查方案数是否正确。 状压 dp 有好几种状态压缩的方式: 记录“选了哪些东西”这样的信息,可以用一个长度为 $n$ 的 01 串,对应一个十进制数。 记录 ......
概论 DP

树形dp

树形dp P1352 没有上司的舞会 点击查看代码 #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <iomanip> #include <iostream> #include < ......
树形

【DP】LeetCode 740. 删除并获得点数

题目链接 740. 删除并获得点数 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 ......
点数 LeetCode 740

区间dp

区间dp 前情提要 先赞后看,必成习惯 一、区间dp-常见的也常考的dp 1.区间dp是什么? 区间动态规划是用 dp的状态来表示和一段区间有关的性质,比如说dp[i] [j]表示解决区间 [i,j] 上的子问题的最小代价或最大收益,然后利用区间子问题之间的关系递推求解。 2.区间dp怎么写? 区间 ......
区间

【DP】LeetCode 213. 打家劫舍 II

题目链接 213. 打家劫舍 II 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 ......
打家劫舍 LeetCode 213 II

【DP】LeetCode 198. 打家劫舍

题目链接 198. 打家劫舍 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 num ......
打家劫舍 LeetCode 198

【DP】LeetCode 1277. 统计全为 1 的正方形子矩阵

题目链接 1277. 统计全为 1 的正方形子矩阵 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j ......
正方形 正方 矩阵 LeetCode 1277

【LeetCode动态规划#12】详解买卖股票I~IV,经典dp题型

买卖股票的最佳时机 力扣题目链接(opens new window) 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返 ......
题型 LeetCode 股票 经典 动态

【DP】LeetCode 221. 最大正方形

题目链接 221. 最大正方形 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 nu ......
正方形 正方 LeetCode 221

Codeforces Beta Round 96 (Div. 1) -- C. Logo Turtle (dp,记忆化搜索)

#记忆化搜索 就是暴力,多一步优化,走过的路别走了。说实话,可能是数据水了,居然能过。 const int N = 510; string s; int n, ans; bool st[501][501][2][50]; void dfs(int x, int idx, int dir, int k ......
Codeforces 记忆 Turtle Round Beta

Educational Codeforces Round 39 (Rated for Div. 2) -- D. Timetable (DP)

写得很折磨人,每次dp都写个一个多小时,写出来明明觉得不难 ^.^ 题目大意:可以进行K次操作,把删除1,进行k次操作后每行第一个 1 和最后一个 1 的位置 相减的绝对值加 1 得到的结果最小。 做法:每次肯定是要从左删或者从右边删,然后顺着这个思路,先把每行的进行小于等于k次操作时, 每行最小的 ......
Educational Codeforces Timetable Round Rated

插头dp

~~插头dp是什么,这里只有插头~~ 在状态压缩动态规划中,有一类是需要记录若干个元素的联通情况,称之为基于连通性状态压缩的动态规划,也就是插头 dp 在大部分棋盘状压 dp 中,状态划分可以依据行或列进行划分,行列之间相对独立,但有时却不行,例如让你在棋盘中对联通块进行操作,下图的联通块是无法用上 ......
插头

树的直径,树的中心性质整理

本文中,设树中所有权都是正的。 直径的定义:不经过同一个点两次的最长链。 中心的定义:对于点 $u$,如果满足所有点到点 $u$ 距离的最大值最小,则点 $u$ 是中心。 请注意树的中心和树的重心是两个不同的概念。 本文中 $u \sim v$ 代表树上 $u \leftrightsquigarro ......
直径 性质

【题解】[ABC299F] Square Subsequence(DP)

【题解】[ABC299F] Square Subsequence 题目链接 [ABC299F] Square Subsequence 题意概述 给定一个由小写英文字母组成的字符串 $S$。计算满足以下条件的非空字符串 $T$ 的数量,答案对 $998244353$ 取模。 将 $T$ 复制一倍形成 ......
题解 Subsequence Square 299F ABC

【DP】LeetCode 91. 解码方法

题目链接 91. 解码方法 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 nums ......
LeetCode 方法 91

【DP】LeetCode 1143. 最长公共子序列

题目链接 1143. 最长公共子序列 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以前 i 个元素组成(即 nums[i - 1])的状态;dp[i][j] 分别表示以 ......
序列 LeetCode 1143

【DP】LeetCode 718. 最长重复子数组

题目链接 718. 最长重复子数组 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums 以第 i 个元素为结尾(即 nums[i - 1])的状态;dp[i][j] 分别表示以 ......
数组 LeetCode 718

【LeetCode动态规划#11】打家劫舍系列题(涉及环结构和树形DP的讨论)

打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不 ......
打家劫舍 树形 LeetCode 结构 动态

C. Python Indentation CF909C--(dp)

#根据题目,又是求方案数的题目,先找到联系,熟悉规则; 看数据就猜是二维DP,题目分为不同字符 'f', 's'. ‘f’根据规则需要缩进一格,‘s’就是简单的输出一行。 所以根据题意:往前一格想,就设思想为:在第i格时有几格缩进的方案数,用f[i, j]表示。 当第i - 1格是‘f’时, 没办法 ......
Indentation Python 909 CF dp

数位dp

如果计算区间[l,r]中出现次数,cnt(r) - cnt(l - 1)即可 # include <iostream> # include <cmath> using namespace std; int dgt(int n) // 计算整数n有多少位 { int res = 0; while (n ......
数位

Codeforces #900D. Unusual Sequences(容斥原理,dp)

原题链接:https://codeforces.com/contest/900/problem/D 求序列a的个数,满足$\sum_{i=1}^{len}=y$并且$gcd(a_1,a_2...a_{len})=x$ 其中序列的长度不限 答案对$1e9+7$取模 首先可以分析出,当$x$不整除$y$ ......
Codeforces Sequences 原理 Unusual 900

【DP】LeetCode 312. 戳气球

题目链接 312. 戳气球 思路 参考动态规划套路解决戳气球问题 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[ ......
气球 LeetCode 312

B. Tree Tag(贪心+树的最长直径)

题目 B. Tree Tag 题意 思路 因为这是一颗树,所以不管怎么追逐,我们都可以理解为在同一条路上追逐(去掉我们不走的路,就是一个线段) 首先,如果da > db,显然能追上,进一步,da == db时,因为路径的长度是有限的,也显然可以追上 因为树上任意两点的最短路径是固定的,所以a点可以一 ......
直径 Tree Tag

Text Editor (CF2E) (DP字符串2端分别dp)

思路: 首先贪心出性质, 通过模拟这个题意,一定是先右边弄完在去左边弄, 或者左弄完去右边弄, 于是左右2边分别dp一次 然后求和 dp[i][j],表示i 和 j 匹配的时的 最小操作次数 转移的时候有一个贪心结论,当 si != tj 时, 这个贡献时一个固定值, 正向:首先i- (公共的), ......
字符串 字符 Editor Text CF2E

【DP】LeetCode 132. 分割回文串 II

题目链接 132. 分割回文串 II 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 在数组的动态规划问题中,一般 dp[i] 都是表示以 nums[i] 为结尾的状态;dp[i][j] 分别表示 以 nums1[i] 和 nums2[ ......
回文 LeetCode 132 II

[PA2021] Od deski do deski (dp)

计数数列个数,要满足能划分为若干个两端相等区间。 首先容易想到DP。 我想的是按段分阶段转移,显然不行,因为很容易算重,一个数列能有多种划分方案则会被算多次。 因此直接计数数列的每位,$g(i,j)$表示前$i$位有$j$种值存在位置的前一个数列满足条件的合法序列方案数,$f(i,j)$则为不合法序 ......
deski 2021 PA Od do

20230419 训练记录:dp

Deque https://atcoder.jp/contests/dp/tasks/dp_l Alice 和 Bob 玩游戏,轮流从 deque 的头/尾取走一个元素,Alice 拿走的数和为 $X$,Bob 拿走的数和为 $Y$。Alice 想最大化 $X - Y$ 而 Bob 想最小化 $X ......
20230419