【学习笔记】dp 状态与转移
Ehab and the Expected GCD Problem
思维还是慢了一步 。
observations + dp 。
这题难在 dp 阶段的设计 。 我们考虑从前往后向序列中填数 ,同时记录当前前缀 gcd 状态。
dp[i][j][k] 表示考虑了前 i 个数,前缀 gcd = 2 j 3 k ( k = 0 / 1 ) \gcd=2^\text{j}3^\text{k}(k=0/1) gcd=2j3k(k=0/1) 。转移是巧妙的 。(乘法原理)
Three Servers
看完题意我是 joker …
简单的背包问题可以让你怀疑人生 …
可达性 dp -> 最优性 dp
observations + dp
同为可达性 dp :https://blog.csdn.net/cqbzlydd/article/details/124870640?spm=1001.2014.3001.5501
Hero meet devil
毋宁是状压好题 。
observations + dp
Min Product Sum
dp(x)
数学(v)
干瞪眼大法 …
我怎么看不懂题解啊
Salvage Robots
大受震撼 …
强行构造状态和dp阶段 …
膜拜 idsy …
考虑中间有一个安全区域 … 四周为危险区域 …
考虑将安全区域拖动,这样危险区域中的一些 robot 会被甩出去 …
设 d p [ a ] [ b ] [ c ] [ d ] dp[a][b][c][d] dp[a][b][c][d] 表示安全区域左上角为 ( a , b ) (a,b) (a,b),右下角为 ( c , d ) (c,d) (c,d) ,在危险区域能救起的 robot 的最大数量 。
至于转移,预处理 Up[i][l][x] 表示第 i 列 [1,l] 的 robot 向上移动不超过 x 步能到达 E 的数量
上下左右四个方向类似 。
转移时考虑这个安全区域往里缩 :
d p [ a ] [ b ] [ c ] [ d ] + ? → d p [ a ] [ b + 1 ] [ c ] [ d ] dp[a][b][c][d]+?\to dp[a][b+1][c][d] dp[a][b][c][d]+?→dp[a][b+1][c][d]
上下左右四个方向同理 。
答案 max ( d p [ i ] [ j ] [ i ] [ j ] + 1 ) ( s [ i ] [ j ] = o ) \max(dp[i][j][i][j]+1)(s[i][j]=o) max(dp[i][j][i][j]+1)(s[i][j]=o) 。因为最后一个 robot 一定是安全的 。
这题的状态和阶段太难想到了 。毋宁称之为构造dp题 。
Prefix Median
咕咕咕 。。。
Min Product Sum
dp 状态好难想啊 …
毋宁将每行每列的最小值找出来 ,然后再考虑 ( i , j ) (i,j) (i,j) 能填哪些数
当然对于一组 x 1 ∼ n x_{1\sim n} x1∼n 和 y 1 ∼ m y_{1\sim m} y1∼m 能写出方案数为 ∏ ( i , j ) ( K − max ( x i , y j ) + 1 ) \prod_{(i,j)}(K-\max(x_i,y_j)+1) ∏(i,j)(K−max(xi,yj)+1)
当然实际情况中可能没有任何一个矩阵合法,但是我们并不关心 。
对于该矩阵的权值,可以表示为 ∏ ( i , j ) min ( x i , y j ) \prod_{(i,j)}\min(x_i,y_j) ∏(i,j)min(xi,yj)
对于所对应的方案数,我们通过容斥计算 。
假设我们枚举不合法的行列数量,不难得到容斥系数 ∑ r ∑ c ( − 1 ) r + c \sum_{r}\sum_{c}(-1)^{r+c} ∑r∑c(−1)r+c
对于不合法的行或列令 x i → x i + 1 x_i\to x_i+1 xi→xi+1 , y j → y j + 1 y_j\to y_j+1 yj→yj+1 ,再算一遍 。
这样暴力做法 ( 2 K ) n + m (2K)^{n+m} (2K)n+m 。
那么关键在于设计一个 d p dp dp 把上面的容斥系数也 rua 进去 ,同时把方案数和权值也 rua 进去
激动人心的时刻来了 。。。
设 f [ t ] [ i ] [ j ] f[t][i][j] f[t][i][j] 表示当前考虑了 ≤ t \le t ≤t 的元素, i i i 行, j j j 列的值已经确定的贡献
因为 t t t 是按顺序加入的,所以我们在状态转移时系数是可算的 。
- 加入 a a a 行不被容斥: f [ t ] [ i + a ] [ j ] ← f [ t − 1 ] [ i ] [ j ] ⋅ ( n − i a ) ⋅ t a ( m − j ) ⋅ ( K − t + 1 ) a j f[t][i+a][j]\gets f[t-1][i][j]\cdot \binom{n-i}{a}\cdot t^{a(m-j)}\cdot (K-t+1)^{aj} f[t][i+a][j]←f[t−1][i][j]⋅(an−i)⋅ta(m−j)⋅(K−t+1)aj
- 加入 a a a 行被容斥: f [ t ] [ i + a ] [ j ] ← f [ t − 1 ] [ i ] [ j ] ⋅ ( n − i a ) ⋅ t a ( m − j ) ⋅ ( K − t ) a j ⋅ ( − 1 ) a f[t][i+a][j]\gets f[t-1][i][j]\cdot \binom{n-i}{a}\cdot t^{a(m-j)}\cdot (K-t)^{aj}\cdot (-1)^a f[t][i+a][j]←f[t−1][i][j]⋅(an−i)⋅ta(m−j)⋅(K−t)aj⋅(−1)a
加入 b b b 列是对称的就不写了 。
注意转移顺序哦 qwq 。做法 O ( K N M ( N + M ) ) O(KNM(N+M)) O(KNM(N+M)) 。轻微卡常 。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530138.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」