35. CF-Kaavi and Magic Spell
这个区间dp的状态设计很巧妙。dp[i][j]
表示用 的长度为 的前缀组成 的子串方案数。
然后转移就是普通的区间dp的转移了。
初始化的时候根据题意,第一个放进去的也是算两种方法的,所以都初始化为 。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int maxn = 3e3 + 5;
const ll mod = 998244353;
ll dp[maxn][maxn];
void solve() {
string s, t;
cin >> s >> t;
int m = s.length(), n = t.length();
for (int i = 0; i < n; ++i)
dp[i][i] = 2 * (s[0] == t[i]);
for (int i = n; i < m; ++i) dp[i][i] = 2;
for (int len = 2; len <= m; ++len) {
for (int i = 0; i <= m - len; ++i) {
int j = i + len - 1;
if (i >= n || t[i] == s[len - 1])
(dp[i][j] += dp[i + 1][j]) %= mod;
if (j >= n || t[j] == s[len - 1])
(dp[i][j] += dp[i][j - 1]) %= mod;
}
}
ll ans = 0;
for (int i = n - 1; i < m; ++i)
(ans += dp[0][i]) %= mod;
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
// cin >> T;
while (T--) {
solve();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】