dfs dp
线性DP+区间DP复习
线性dp 即递推状态转移方程有明显的线性关系,可能是1维线性,可能是2维线性,等等 如数字三角形:https://www.acwing.com/problem/content/900/ 首先考虑状态表示和状态计算 给图一个编号,如图,7为(4,2) 状态表示: f[i][j]表示所有从起点,走到i, ......
C. Unlucky Numbers(数位dp)
题目 https://codeforces.com/contest/1808/problem/C 题意 给两个数 l 和 r $ ( 1 ≤ l ≤ r ≤ 10^{18})$ 请找出再这个范围内的一个数字,使得按数位这个数字中的数最大值和最小值之差最小 思路 当 l 和 r 的数位长度不一样时,可 ......
【DP】LeetCode 256. 粉刷房子
题目链接 256. 粉刷房子 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n ......
Leetcode刷题--最长回文子串/dp = [[False] * n for _ in range(n)]
官方动态规划解决最长回文串问题代码解释: class Solution: def longestPalindrome(self, s: str) -> str: n = len(s) #字符串的总长度 if n < 2: return s #如果字符串长度为1,则s本身就是最长回文串 max_len ......
树形DP——小红树
题目描述 小红拿到了一棵树,每个节点被染成了红色或者蓝色。 小红定义每条边的权值为:删除这条边时,形成的两个子树的同色连通块数量之差的绝对值。小红想知道,所有边的权值之和是多少? 输入描述 第一行输入一个正整数n,代表节点的数量。第二行输入一个长度为n且仅由'R'和'B'两种字符组成的字符串。第i个 ......
Leetcode(剑指offer专项训练)——DP专项(6)
排序的数目 题目 给定一个由 不同 正整数组成的数组 nums ,和一个目标整数 target 。请从 nums 中找出并返回总和为 target 的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。 题目数据保证答案符合 32 位整数范围。 链接 无效DF ......
Leetcode(剑指offer专项训练)——DP专项(5)
最少的硬币数目 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 链接 完全背包问题 思路:主要是要自己推出动态转移方程 $$ F(i)=min_{ ......
【DP】LeetCode 64. 最小路径和
题目链接 64. 最小路径和 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 表示状态 假设到了右下角,考虑一下我们要存储的信息 走到最后坐标的最小步数 当前坐标的信息,用来判断是否走到了右下角 很容易联想到使用二维数组 dp[i][j ......
【DP】LeetCode 70. 爬楼梯
题目链接 70. 爬楼梯 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 表示状态 假设走到了最后一层台阶,考虑一下我们要存储的信息: 走到这最后一层台阶的方法数 当前台阶数,用于判断是否走到了最后一层台阶 这时候很容易想到使用一维数组 ......
dfs理解
dfs理解201 深搜(DFS)哔哩哔哩bilibili董晓 - 博客园 (cnblogs.com)深搜的时机在扩展当前节点的邻边之前,即for当前节点的儿子节点之前,刚进入当前这个节点。for完当前节点的所有儿子节点之后,要离开当前节点了。 开始for当前节点的扩展邻边时,即刚从当前节点出去。此时 ......
AcWing 第 97 场周赛 ABC(dfs)
https://www.acwing.com/activity/content/competition/problem_list/3088/ 果然绩点成绩和竞赛水平总得寄一个(to me ###4944. 热身计算 #include<bits/stdc++.h> using namespace st ......
Leetcode(剑指offer专项训练)——DP专项(4)
加减的目标值 给定一个正整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" ......
ACM NFLSOJ #834 - 【2021六校联考WC #2】三角形(找性质+数位 dp)
首先先手玩一下所有点的 $x$ 都相同的情况,你会发现存在解的必要条件是所有黑点的 $y$ 构成一段连续的区间,此时答案为 $(X+R-L,L)$,其中 $L,R$ 为所有点中纵坐标的最小和最大值。 受这个思想启发,我们考虑将所有点都变到同一 $x$ 坐标上,设 $X=\min{x_i}$。那么显然 ......
简单理解 DP 套 DP
复制粘贴的: 通过一个外层的 DP 来计算使得另一个 DP 方程最终结果为特定值的输入数。 例如求有多少种输入使得一个背包 DP 恰好答案为 $K$。 外层 DP 的状态是所有子 DP 的状态的值。 子 DP 状态数很少,通常经过滚动数组优化,比如 $3n$ 变成 $2\times 3$) 通常我们 ......
决策单调性优化 DP
虽然我之前说过「DP 优化的重点都在于设计 DP 而非优化 DP 」之类的话,不过这些优化方式的确值得一学。。 代码会单独放在另一篇文章里。 决策单调性优化 DP 这里面学问很深啊。优化方式也多种多样。 总的来说,对于一类形如 $f_i=\min f_j+w(j,i)$ 的转移方程,设 $p_i$ ......
【做题笔记】树形 dp
1. luoguP2016 战略游戏 1.1 Solve 设计状态 $dp[i][0/1]$ 表示在 $i$ 子树内, 放/不放 第 $i$ 个节点使其合法所需的最少的士兵数目。则有: 不选 $i$ 节点,则 $i$ 的儿子必须选; 选 $i$ 节点,则 $i$ 的儿子可选可不选; 因此,转移方程为 ......
洛谷 P5642 - 人造情感(换根 dp)
想起来很轻松,写起来很酸爽的套路题。 默认以 $1$ 为根。先考虑怎么算单个 $f(u,v)$,我们定义一个连通块的权值为从该连通块中选出若干条点不相交的路径,选出的路径的权值之和的最大值。那么显然 $f(u,v)$ 就是整棵树的权值 $-$ 挖掉 $(u,v)$ 这条路径后各个连通块的权值之和。显 ......
【DP】LeetCode 62. 不同路径
题目链接 62. 不同路径 思路 代码 class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; Arrays.fill(dp[0], 1); for(int i = 0; i < m; i ......
【SSL 2401】天地一抹红(斜率优化 DP)
有一个 n*m 的网格,要从 (1,1) 走到 (n,m)。
然后你可以花费当前格的代价从 (i,j) 走到 (i+1,j),或者走到 (i,k) 其中 k>j。
当你走到 (i,k) 的时候,你可以选择 (i,j)~(i,k-1) 中地方含有宝石价值的最大值,然后就会给你贡献这个最大值乘 (i,k... ......
数位DP (记忆化 暴力搜索!!)
用于: 统计数位于数位的相关信息的计数问题, 通常会问在某个区间内, 利用减法思维,这样就会减少一个边界的判断 此时就会只有一个边界, 这个边界 利用 lim 处理, 在暴力枚举的时候不要超过lim 就行了 记忆化搜索的过程, 就是一个完全的暴力, 不过有记忆化搜索, 所以他的时间复杂度是 DP的空 ......
dos批处理中%~dp0%的说明
原文:(49条消息) dos批处理中%~dp0%的说明_批处理 %~dp0 后面的文本_Crett的博客-CSDN博客 %~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录cd是转到这个目录,使用 /D 开关,除了改变驱动器的当前目录之外,还可改变当前驱动器。 ......
CF1295E Permutation Separation 题解 线段树优化dp
题目链接:https://codeforces.com/problemset/problem/1295/E 题目大意: 将排列 $p_1, p_2, \ldots, p_n$ 先分成 $p_1, \ldots, p_k$ 与 $p_{k+1}, \ldots, p_n$ 两个集合。 然后可以将元素从 ......
洛谷 P1922 女仆咖啡厅桌游吧(树形DP)
https://www.luogu.com.cn/problem/P1922 标注的是个树形dp,其实就是个简单的dfs+dp 输入 #1 5 1 2 2 3 3 4 2 5 输出 #1 2 读题时间>构思时间+码代码时间(菜鸡日常 #include<bits/stdc++.h> using nam ......
【DP】LeetCode 剑指 Offer 60. n个骰子的点数
题目链接 剑指 Offer 60. n个骰子的点数 思路 动态规划问题中,只用考虑第 n 个阶段如何由第 n-1 个阶段转化过来 在本题中,就是投掷 n 个骰子的结果如何由 投掷 n-1 个骰子的结果转化过来。 代码 class Solution { public double[] dicesPro ......
【题解】[九省联考 2018] 一双木棋 chess(轮廓线 dp)
题目分析: 之前一直听说过轮廓线 $dp$,但是没有真正见过,这次真正见到了让我大为震撼。 轮廓线 $dp$ 顾名思义就是维护轮廓线,这类题目一般都是在网格图上。 而对于任意一条轮廓线也就是一条从左上到右下或者从左下到右上的线,而且一般这种轮廓线都满足一定的性质,也就是不可能存在向内凹陷的情况,即一 ......
【题解】CF1498F Christmas Game(换根 dp)
题目分析: 感觉这个题目难度适中,而且换根 $dp$ 的过程相当好写并且很 educational,所以就当作换根 $dp$ 的典例,来讲讲换根 $dp$ 到底是个啥吧。 换根 $dp$ 其实就是用来解决:树上询问以每个点为根的相关信息,以指定某个点为根的时候信息很好求解,在换根的时候只会影响极少点 ......
[睡前小dp] 序列相似性问题(一)LCS和LIS
1. LCS问题 LCS:最长公共子序列,表示序列 L 和 J 最长公共的子序列长度。 计算 LCS 的经典方法是时间复杂度为 O(n*m) 的 dp。不妨设 dp[i][j] 为 LCS(L[0~i], J[0~j]),这样能够得到递推公式: dp[i][j] = 0 (i=0 or j = 0) ......
洛谷 P1806 跑步(DP)
https://www.luogu.com.cn/problem/P1806 题目描述 路人甲准备跑n圈来锻炼自己的身体,他准备分多次(>1)跑完,每次都跑正整数圈,然后休息下再继续跑。 为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多。 可以假设他刚开始跑了 0 圈,那么请问他可以有 ......