zhengjun dp

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

树形DP——小红树

题目描述 小红拿到了一棵树,每个节点被染成了红色或者蓝色。 小红定义每条边的权值为:删除这条边时,形成的两个子树的同色连通块数量之差的绝对值。小红想知道,所有边的权值之和是多少? 输入描述 第一行输入一个正整数n,代表节点的数量。第二行输入一个长度为n且仅由'R'和'B'两种字符组成的字符串。第i个 ......
树形

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

排序的数目 题目 给定一个由 不同 正整数组成的数组 nums ,和一个目标整数 target 。请从 nums 中找出并返回总和为 target 的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。 题目数据保证答案符合 32 位整数范围。 链接 无效DF ......
专项 Leetcode offer

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

最少的硬币数目 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每种硬币的数量是无限的。 链接 完全背包问题 思路:主要是要自己推出动态转移方程 $$ F(i)=min_{ ......
专项 Leetcode offer

【DP】LeetCode 64. 最小路径和

题目链接 64. 最小路径和 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 表示状态 假设到了右下角,考虑一下我们要存储的信息 走到最后坐标的最小步数 当前坐标的信息,用来判断是否走到了右下角 很容易联想到使用二维数组 dp[i][j ......
路径 LeetCode 64

【DP】LeetCode 70. 爬楼梯

题目链接 70. 爬楼梯 思路 分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律 表示状态 假设走到了最后一层台阶,考虑一下我们要存储的信息: 走到这最后一层台阶的方法数 当前台阶数,用于判断是否走到了最后一层台阶 这时候很容易想到使用一维数组 ......
楼梯 LeetCode 70