dp

To_Heart—总结——连通块 dp(抑或 连续块 dp)

简介 有一类问题,他们需要计算满足在序列上插入给定顺序的元素,其贡献/限制只与两旁的元素有关,但元素插入的位置是不一定的,所以会有代价的最值和方案数的统计。而对于这类问题,我们其实可以不关心每一次插入的具体位置在哪里,而只关注他的相对位置(比如在某个数左边、在某个数左边且与其相邻之类的),从而将状态 ......
To_Heart Heart To

区间 DP、环形 DP

区间 DP 区间 DP 是可以由小区间的结果往两边扩展一位得到大区间的结果,或者由两个小区间的结果可以拼出大区间的结果的一类 DP 问题 往往设 \(dp[i][j]\) 表示处理完 \([i,j]\) 区间得到的答案,按长度从小到大转移 因此一般是先写一层循环从小到大枚举长度 \(len\),再写 ......
环形 区间 DP

【动态规划】【动态 DP】 CF750E New Year and Old Subsequence

题目描述 定义数字串是好的当且仅当其包含子序列 2017 ,不包含子序列 2016。 定义数字串的丑陋值为最少删掉几个字符,它才能是好的,如果一直不能,就是 \(-1\) 。 给定数字串 \(t\) ,长度为 \(n\) ,\(q\) 次询问求 \([l,r]\) 的丑陋值。 \(1 \leq n, ......
动态 Subsequence 750E Year 750

DP查缺补漏之LCS状态重叠

DP查缺补漏之\(LCS\)状态重叠 状态假设 \(F[i][j]\)为\(a\)串中前\(i\)个字符,\(b\)串中前\(j\)个字符构成的\(LCS\) 状态转移 \(F[i - 1][j - 1] + 1\) 即当且仅当\(a[i] = b[j]\)时,从两个序列的减去当前的字符加一推出 \ ......
状态 LCS

DP查缺补漏之LIS状态记录

DP查缺补漏之\(LIS\)状态记录 前置知识 状态假设 \(F[i]\)为以\(a[i]\)为结尾的最长上升子序列长度。 状态转移 \(F[i] = max(F[j] + 1, F[i]) (j < i)\) 很好理解,即\(i\)之前的所有以\(a[j]\)结尾的最长上升子序列中取最大,再加上\ ......
状态 LIS

数位DP

目录数位DP第一个例题 数位和第二个例题 数数相关资料例题综合运用模板题 数位DP 数位DP用于数字的数位统计,如果题目和数位统计有关,那么可以用数位DP思想,把低位的统计结果记录下来,在高位计算的时候直接使用低位的结果 感觉很抽象啊,而且还有点难啊啊啊。下面给出的几个例题再理解理解! 数位动态规划 ......
数位

Atcoder Beginner Contest 321 G - Electric Circuit 题解 - 状压dp | 指定最低位

为了更好的阅读体验,请点击这里 题目链接:G - Electric Circuit 看到了 \(N\) 的数据范围,因此是显然的状压 dp。 不妨设 \(f_S\) 为仅使用 \(S\) 集合中的所有点,能够连成恰好 \(1\) 个连通块的方案数。\(g_S\) 为仅使用 \(S\) 集合中的所有点 ......
题解 Beginner Electric Atcoder Contest

DP难题:颜色的长度

颜色的长度 Color Length 题面翻译 输入两个长度分别是 $n$ 和 $m(n,m\leq 5000)$ 的颜色序列,要求按顺序合并成同一个序列,即每次可以把一个序列开头的颜色放到新序列的尾部。 例如,两个颜色序列 GBBY 和 YRRGB,至少有两种合并结果:GBYBRYRGB 和 YR ......
长度 难题 颜色

20231108数数与dp题笔记

数数与dp CF294C Shaass and Lights 记被分成的 \(m+1\) 段每一段的长度为 \(l_i\) 答案为 \[\frac{(n-m)!}{\prod\limits_{i=1}^{m+1}l_i!}\times \prod\limits_{i=1}^{m+1}2^{l_i-1 ......
20231108 笔记

DP无思路题汇总

DP无思路题汇总 即只能完全靠题解想出做法的题目。 P5020 NOIP2018 提高组 货币系统 P2851 USACO06DEC The Fewest Coins G ......
思路

DP 与计数

NFLSOJ A CF294C Shaass and Light 考虑初始已点亮的灯将所有剩下的灯划分成的连续段。除开头结尾外,每个长为 \(l\) 的连续段有 \(2 ^ l\) 种操作序列。开头结尾的连续段只有 \(1\) 种操作序列。从前往后将所有的操作序列归并到全局的操作序列里,拿组合数随便 ......
DP

SP15637 GNYR04H - Mr Youngs Picture Permutations(线性 dp)

题目 求方案数,考虑 dp —— 状态设计和边界 —— 题目告诉了一个很显然的性质: 每一排从左至右保证高度单调递减 每一列从后往前保证高度单调递减 那么可以发现,对于每一行,每一列,一定是按高度顺序插入,并且是连续插入,因为如果不连续,就无法保证单调递减的性质 同时,它给出了另一个性质 : \(N ......
线性 Permutations Picture Youngs 15637

DP练!习!

DP练!习! 都是水题啊 Made By M1kuFan 1 洛谷 P2513 求长度为 \(n\) ,逆序对个数为 \(K\) 的排列有多少个,答案对 \(1e9 + 7\) 取模 其中:\(1 \le n,K\le100\) 仅考虑从大到小向序列中插入每个数的位置,当前插入到了第 \(i\) 个 ......

P2196-DP【黄】

清醒了一点后我又写了一道黄色DP题,做出来了,还行,开心不少了... 中途暴露出一些问题 1、深搜过程中既然用了二维数组,那么深搜时就应该用二维循环取最优解,而不是只从最后一行中进行一维循环取最优解。 2、dfs递归的过程中应该用dfs!!!不应该像个智障一样的忘了用dfs,直接用dp数组忘了递归了 ......
2196 DP

P1616-DP【橙】

这道题好几天前就写出了记搜代码,但是理论上空间恰好够,实际上不论是用new-delete还是malloc-free,都有1~2个点MLE了(最抽象的是一开始MLE两个点,我把数组两个下标调换顺序后理应得到相同的分数,但实际上...竟然变成只MLE一个点了...离谱至极),看来动态内存不是那么好使,他 ......
1616 DP

比较典的区间dp

P1220 关路灯 很典的一道题,但是以前居然不知道。 数据范围很小,可以直接搜索通过,加一些奇奇怪怪的贪心策略和剪枝即可和正解差不多速度通过。 \(Code_violent\) ll ans=9e18; int n,st,loc[51],p[51]; void dfs(int x,ll t,ll ......
区间

【动态规划】状态压缩DP(状压dp)

还在更新ing 一、引入 在动态规划状态设计中,若状态是一个集合,例如 \(S=\) { \(1,0,1,1,0\) } ,则表示第 \(1、2、4\) 个节点被选中(从右往左对应 \(0 \sim 4\) 号节点)。若集合的大小不超过 \(N\) ,则集合中的每个元素都是小于 \(K\) 的正整数 ......
状态 动态

【动态规划 & 换根dp】Change Root DP

还在更新ing 前言 此乃小 Oler 的一篇小小算法随笔,从今日后,还会进行详细的修订。 一、简单介绍(change root dp) 如需了解树形dp的,本蒟蒻毛遂自荐,万字大文动态规划【树形dp】Tree DP ~~~详解 换根dp,又叫二次扫描,是树形DP的一种,是一种用来求解树上各点到其他 ......
动态 Change Root amp DP

区间DP入门

石子合并 别人讲过太多了,蒟蒻就不说了。 Polygon 这题跟石子合并类似,只是多输出了个先清除哪条边可以使得值最大。 因为我们不确定先删那一条,我们就再复制一遍添到输入的结尾,就变成了 $2 \times N - 1$。 我们思考最大值是由哪些贡献的。 最大值与最大值运算。 最小值乘上最小值(因 ......
区间

状态压缩DP

关于状态表示形式的优化方式。 使用场景:需要记录不超过二进制数位(通常22位以内)的bool信息的DP问题。 常见的位操作 简单操作 任何二进制数位 &1 得到它本身。 任何二进制数位 ^1 则取反。 任何二进制数位 &0 则赋值为0。 任何二进制数位 |1 则赋值为1。 混合操作 (n>>k&1) ......
状态

DP 专项练习

[USACO23OPEN] Pareidolia S 对于这种题,两种思路,一种是直接 \(dp\),一种是考虑每个 bessie 产生的贡献。 显然直接考虑 bessie 产生的贡献难以解决 bbessie 的情况,所以考虑 \(dp\)。 设 \(f_{i}\) 表示以 \(i\) 开头的字符串 ......
专项 DP

CF DP 题乱做(续更)

CF566F $1500$ 容易考虑到 $n^2$ 做法:设 $dp_i$ 为第 $i$ 个数选的答案,对于排好序的序列,枚举前面的数 $a_j$,如果 $a_j|a_i$ 就转移,时间复杂度易知 $O(n^2+n\log n)$。 由于 $a$ 至于很小,延续刚才的思路,设 $dp_i$ 为选值为 ......
CF DP

P1802-DP【橙】

1.又是一道因为写了异常剪枝而调了好久的题,以后再也不写异常剪枝了,异常情况压根不该出现,所以针对出现的异常情况进行补救的异常剪枝是一种很容易出错的行为,做为两手准备也就罢了,但第一次写成的代码必须能在没有异常剪枝的情况下算出正确结果才行! 2.还提出了一个专门针对记搜的编码规范:编写记忆化搜索的时 ......
1802 DP

P1164-DP【橙】

这道题让我更深入的理解了记忆化搜索的过程,既然记忆化搜索的结果要靠返回值来传递,那么记忆化搜索解决问题的必须是倒序的,即记忆化搜索是一个简化问题倒序解决的过程,普通搜索是一个复杂化问题逐步尝试并记录尝试结果的过程。 特别是对于求总种数的记忆化搜索,就是把能干的事情组合起来然后把情况全都加到DFS变量 ......
1164 DP

P1216-DP【橙】

在这道题中,我第一次用了memset,确实方便,不过需要注意的是只有全部赋值-1和0的时候才能使用它,否则他能干出吓死人的事。以及memset在cstring头文件里,在本地就算不include也能照常编译,但评测机里可能不行,所以一定要写上cstring 同时,我半获得半自我总结了一个暴论,这个暴 ......
1216 DP

DP查缺补漏之多重背包优化原理

DP查缺补漏之多重背包优化原理 普通思路 类似完全背包 for(int i=1;i<=n;i++) for(int j=1;j<=V;j++) for(int k=1;k<=V/c[i];k++) { if(k*c[i]<=j) f[i][j]=max(f[i-1][j],f[i-1][j-k*c[ ......
背包 原理

poj 2411 状压dp入门题

Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 29096 Accepted: 15505 Description Squares and rectangles fascinated the f ......
2411 poj

DP查缺补漏之完全背包优化原理

DP查缺补漏之完全背包优化原理 先复习一下基本知识 状态假设 DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值) 状态转移 DP[I][J] = max(DP[I - 1][J], DP[I - 1][J - k*V[I]] + k*W[I]) 对于第\(i\)个物品,两 ......
背包 原理

CF练习题17(DP)

Chocolate Bar 我们看到 \(n,m\le 30\) 想到暴搜。 考虑枚举分割线,一直到刚好满足需要或者只有一个巧克力的情况。 随手跑了个最优解。 inline int dfs(int n,int m,int k){ if(n*m==k)return 0; if(k<=0)return ......
练习题 17 DP

DP查缺补漏之01背包优化原理

DP查缺补漏之01背包优化原理 先复习一下基本知识 状态假设 DP[I][J]为前\(i\)个物品,容量小于\(j\)时的最优解(最大价值) 状态转移 DP[I][J] = max(DP[I - 1][J], DP[I - 1][J - V[I]] + W[I]) 对于第\(i\)个物品,两种可能 ......
背包 原理