dp

博弈论dp

博弈DP解决的是两人轮流操作,且没有平局的两人博弈游戏,和博弈问题的形式相同。 博弈论dp正推会有后效性,这是无法解决的 所以一般博弈论dp会选着逆推 但实际上逆推也不好写,所以这时候一般会以记忆化搜索dp的形式来写博弈论dp ......
博弈论

康复训练の树形DP

所有代码的开头头文件,宏定义和命名空间如下 #include <bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<typename Ty,typename... Ar> #define ll long long # ......
树形

矩阵链(DP思想)

引入 按顺序排列的的三个矩阵 M1,M2,M3 计算三个矩阵相乘结果,有两种乘法 (M1 M2) M3 M1(M2 M3) 但两种乘法计算次数不同 三个矩阵维度如下 4 * 5 5 * 6 6 * 7 第一种计算次数 4 * 5 * 6 + 4 * 6 * 7 第二种计算次数 5 * 6 * 7 + ......
矩阵 思想

405 最长公共子序列 线性DP

视频链接:https://www.bilibili.com/video/BV1EK411K7Eb/ #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=1010; i ......
线性 序列 405

403 最长上升子序列 线性DP

视频链接:https://www.bilibili.com/video/BV1KK4y1e7t7/ #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=1010; i ......
线性 序列 403

Leetcode(剑指offer专项训练)——DP专项(8)

最长递增路径 题目 给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。 链接 DP 但是依旧不能覆盖所有的情况 class Solution { pub ......
专项 Leetcode offer

换根dp

给定一棵树,树中包含 nn 个结点(编号11~nn)和 n−1n−1 条无向边,每条边都有一个权值。 请你在树中找到一个点,使得该点到树中其他结点的最远距离最近。 输入格式 第一行包含整数 nn。 接下来 n−1n−1 行,每行包含三个整数 ai,bi,ciai,bi,ci,表示点 aiai 和 b ......

「学习笔记」数位 DP

「学习笔记」数位 DP 意义不大的题不写了。 点击查看目录 概述 数位 DP 一般用来解决「在一个较大的区间内统计具有一定特征的数的数量」的问题。 数位 DP 一般有两种做法: 递推法:首先需要预处理出具有一定条件的数的个数,然后将上限按数位拆分开来考虑贡献。 暴搜法:直接记忆化搜索具有特定条件的数 ......
数位 笔记 DP

LeetCode 双周赛 101,DP/中心位贪心/裴蜀定理/Dijkstra/最小环

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 这周比较忙,上周末的双周赛题解现在才更新,虽迟但到哈。上周末这场是 LeetCode 第 101 场双周赛,整体有点难度,第 3 题似乎比第 4 题还难一些。 周赛大纲 2605. 从两个 ......
定理 LeetCode Dijkstra 101 DP

20230401数位DP

数位DP 数位DP通常指在$[l,r]$区间中有多少个满足条件$k$的个树 常见的数据范围都很大 也就是说, 把数字的枚举,变成数字的构造 不要把数字看作是$10^{18}$ 而把数字看作是$18$位数的填数过程 就是把原本枚举的问题转化为了构造的问题 然而数位dp常通过记忆化搜索实现 tips: ......
数位 20230401

数位 dp

数位 $\text{dp}$ 前言 谨慎学习此算法。 算法讲解 AcWing 1081.度的数量 题意分析:你看到这道题,是不是无从下手?其实题目就是让我们求在 $x \sim y$ 中,有多少个数分解成 $B$ 进制后仅有 $k$ 位为 $1$,其余均为 $0$; 考虑暴力:从 $x$ 枚举到 $ ......
数位 dp

石子合并 - 区间 DP

石子合并 - 区间动态规划 题意 设有 $N$ 堆石子排成一排,其编号为 $1 \sim N$。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这 $N$ 堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的 ......
区间 石子 DP

蒙德里安的梦想 - 状压 DP

蒙德里安的梦想 - 状态压缩动态规划 题意 求把 $N \times M$ 的棋盘分割成若干个 $1 \times 2$ 的长方形,有多少种方案。 样例输入 2 4 样例输出 5 算法 状态压缩动态规划 (状压DP) $\to$ OI-WIKI 状态压缩,顾名思义,就是将某一种状态压缩成容易储存的形 ......
梦想 DP

DP

1. 最大的和 来源《信息学奥赛一本通》 原题链接 题目描述 对于给定的整数序列 $A=\lbrace a_1,a_2,…,a_n \rbrace$,找出两个不重合连续子段,使得两子段中所有数字的和最大。 我们如下定义函数 $d(A)$: $$d(A) = max_{1≤s_1≤t_1<s_2≤t_ ......
DP

合成大西瓜 (期望DP,消元) (2023年“华为”杯广东工业大学第十七届程序设计竞赛)

思路: 离目标越进吗,那个期望值越小,所以就 f=f1+f2+f3..... ......

树形dp

https://atcoder.jp/contests/abc259/tasks/abc259_f 树形dp(最简单的那种类型,但是题目的方法还是很巧妙的) 易知:负权边可以忽略 思路 定义 定义f[i][0]表示以i为根的子树尽量用到d[i]-1条边的最大可能(留一条边给父节点联通用) f[i][ ......
树形

数位dp

#数位dp ##思想 一般来说,题目是要求在区间$[l,r]$中符合某一种条件的数的个数 我们用前缀和的思想考虑,分别求出$[1,r]$和$[1,l-1]$中数的个数相减即为所求 这里采用记忆化搜索的方式实现 ##模板 #include<iostream> #include<cstring> #in ......
数位

【容斥、状压dp】主旋律 题解

【清华集训2014】主旋律 题解 神秘题。 题目简述 给你一个有向图 $G=(V,E)$。求有多少 $E$ 的子集 $E'$ 使得新图 $G'=(V,E')$ 是强连通图。 强连通图的定义是任意两点 $u,v$ 均存在 $u\to v,v\to u$ 的路径。 $n\leq 15,m\leq n\t ......
题解 主旋律

一道一板一眼的数位dp和二分结合的板子题

题目 1811E - Living Sequence 题意 找出第n个,数位中不含‘4’的数字 思路 数位dp + 二分 唯一要注意的就是纯dfs搜索会卡常(hh,就是复杂度太高了),用上一点记忆化 代码 const int N = 14; int dp[N][N]; int a[N]; int l ......
一板一眼 板子 数位 一道

Disjoint-Set-Union Sum (诈骗题)(区间DP, 位置顺序!!!!)

题目大意: 给出一个序列P , n 个点 每次可以选择2个 相邻区间进行合并, 会产生一个贡献值,当然合并n-1就合并完了, 问在所有的情况下, 贡献和是多少 思路: 易错点: 这个所有情况, 你枚举的合并的那个先后顺序是有关系的!!! 因此直接去区间dp只能把各个合并的情况给弄出来,但是他的先后顺 ......

Leetcode(剑指offer专项训练)——DP专项(7)

矩阵中的距离 题目: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 链接 TLS思路题解 暴力DFS的结果是超时😢,就是找每个位置的距离它最近的零点的位置 class Solu ......
专项 Leetcode offer

[Algorithm] DP - 03. Max Subset Sum No Adjacent - Slice window

Write a function that takes in an array of positive integers and returns the maximum sum of non-adjacent elements in the array. If the input array is ......
Algorithm Adjacent Subset window Slice

洛谷(dp) 动态规划练习的部分题目心得

P1044 栈这个题目 最大的问题是完全没有想清楚dp数组如何定义,完全陷入了背包的那个dp数组含义中了,导致怎么都想不出关系, 而且看了题解提示之后也无法领悟递推的思想,无法感受那种由前面推导后面的思想. 导弹拦截 P1020 这题是我太惯性思维了,疯狂往如何才能构造dp数组想,然后没能真的把握题 ......
题目 心得 部分 动态

状压DP简介

##普通DP回顾 DP是解决多阶段决策最优化问题的一种思想方法,即利用各个阶段之间的关系,逐个求解,最终求得全局最优解。我们通常需要确认原问题与子问题、动态规划状态、边界状态、状态转移方程。 动态规划多阶段一个重要的特性就是无后效性,即“未来与过去无关”。无后效性就是对于某个给定的阶段状态,它以前各 ......
简介

状压DP

[acwing]291. 蒙德里安的梦想 /* 横放的方案数就等于总方案数,因为横着放完后,再竖着放是唯一的 dp[i][j] 表示第 i 列状态为 j 的方案数 状态为 j 是指:各行用 0 或 1 表示摆放状态 :若某行为 0,表示竖放或由前一列伸出 :若某行为 1,表示横放并向后一列伸出 dp ......

扑克牌 - 期望dp

扑克牌 - 期望dp https://www.acwing.com/problem/content/220/ #include <bits/stdc++.h> using namespace std; const int N = 20, inf = 1e9; double f[N][N][N][N] ......
扑克牌 扑克

线性DP+区间DP复习

线性dp 即递推状态转移方程有明显的线性关系,可能是1维线性,可能是2维线性,等等 如数字三角形:https://www.acwing.com/problem/content/900/ 首先考虑状态表示和状态计算 给图一个编号,如图,7为(4,2) 状态表示: f[i][j]表示所有从起点,走到i, ......
区间 线性 DP

C. Unlucky Numbers(数位dp)

题目 https://codeforces.com/contest/1808/problem/C 题意 给两个数 l 和 r $ ( 1 ≤ l ≤ r ≤ 10^{18})$ 请找出再这个范围内的一个数字,使得按数位这个数字中的数最大值和最小值之差最小 思路 当 l 和 r 的数位长度不一样时,可 ......
数位 Unlucky Numbers

【DP】LeetCode 256. 粉刷房子

题目链接 256. 粉刷房子 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n ......
LeetCode 房子 256

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 ......
回文 Leetcode False range for