一系列DP题目
「BJOI2014」路径
由于数据范围很小,图对于我们来说就没有什么问题了。
将步数、括号到了第几层,上一个字符是什么记入状态。转移要注意很多细节,判掉不合法的。
这里注意,由于 0 是否作为第一个是我们所关心的,那么在设计
「雅礼集训 2019 Day7」Inverse
前缀和优化dp
传统的整体记录的状态无法解决问题。
看到数据范围很小,那么令
优化
CSP-S 2024 染色
还是好好想想整个思路。
设计过的状态:
从第二个状态的疑点出发:这个状态是一块一块转移的,并不能做到相邻位置的转移。如果可以做到这点,那么复杂度就会下来。那么我们把
但是这又如何优化呢?我们之前有一个困惑:无法很好记录价值,这是因为惯性思维地选择了一段的右端点作为转移的关键点。但是如果我们以
Costly Binary Search
DP 状态优化。发现答案比
NOIP2021 方差
两层:1. 看出来了操作的本质是交换差分;2. 发现贪心:所有的差分是一个单谷。
第一个看出来就可以全排列了,有 20pts。(我 next_permutaion 前没排序爆挂一个点 qwq)
我没看出来第 2 个,其实观察样例是可以得出来的。那剩下的只有 DP 了。
接下来就分两种转移:
放右边:
放左边:
时间复杂度
b6e6 - NFLSOJ,有点问题
序列变换问题,DP
对于序列直接转化,步数是一个经常讨论的问题,那么对于两个状态之间的步数,就是
然后就是贡献,发现贡献可以由
设计状态
注意步数的浪费。
B. Integers Have Friends - 暑期训练37,E. 小 ω 的仙人掌 - 暑期训练37
trick:对于需要双指针维护不可差分信息(gcd,背包等),考虑维护两个栈,
B 题是维护 gcd。E 题要稍微转化一下,其实就是一个
C. 疯狂传染病 - 暑期训练37
因为乘法的结合律,可以使用倍增,直接 c[i*j%mod]|=a[i]&b[j]
;也有找循环节的做法(也许是数据太水);或者
从数据范围上出发:类似矩阵快速幂;从性质上出发:可结合的信息转移。
D. 小C的屏幕保护程序 - 暑期训练37、全民健身[NFLS]
参变分离
全民健身这道题目,当时没算空间,浪费了大把时间。主要是一个
字符串匹配度
正确的状态有利于发现正解的突破口(即使时间复杂度更劣),贡献转换(题意转换)
一开始设计了状态
其实题面就是绕了一下,刻意地应当被引导到
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int mod = 998244353;
int n,l1,l2;
char a[N],s1[N],s2[N];
vector<int> e1[30],e2[30];
int f[30][30],ans;
inline int add(int x,int y){ return x + y >= mod ? x + y - mod : x + y; }
inline void toadd(int &x,int y){ x = add(x,y); }
int main(){
freopen("seq.in","r",stdin);
freopen("seq.out","w",stdout);
scanf("%s%s%s",a+1,s1+1,s2+1);
n = strlen(a+1), l1 = strlen(s1+1), l2 = strlen(s2+1);
for(int i = l1;i;--i)e1[s1[i]-'a'].push_back(i);
for(int i = l2;i;--i)e2[s2[i]-'a'].push_back(i);
for(int i = 1;i<=n;++i){
toadd(f[0][0],1);
for(int x : e1[a[i]-'a'])for(int y = 0;y<=l2;++y)toadd(f[x][y],f[x-1][y]);
for(int x : e2[a[i]-'a'])for(int y = 0;y<=l1;++y)toadd(f[y][x],f[y][x-1]);
toadd(ans,f[l1][l2]);
}
printf("%d",ans);
return 0;
}
火星细菌
link,203。
比赛时都不知道自己在想什么,思维混乱。
省题:要注意翻转不是对称而是交换!!!
注意到我们关心的只是以一个节点的子树的左右叶子节点,因为在合并时只有他们会影响答案。
可以有状态
转移
这里涉及到了一个重要的 DP 优化。我们为了省去枚举
这样转移就变为了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】