这个要把dp[i]的状态分成两类 第一类是以)结尾的, 第二类是以a结尾的.
#include <iostream> using namespace std; const int mod = 19301; unsigned long long dp[10000]; int n; void build(){ dp[0]=1; dp[1]=1; for (int i = 2; i <= n; ++i) { dp[i] = 0; //分类讨论 以)结尾 for (int j = 0; j <= i-2; ++j) { dp[i] += (dp[j] * dp[i-2-j]);// 任意分成了两段 dp[i] %= mod ; //必须马上mod 不然会爆 } //以a结尾 dp[i] += dp[i-1]; dp[i] %= mod; } } int main(int argc, char const *argv[]) { cin>>n; build(); cout<<dp[n]<<endl; return 0; }
本文探讨了使用动态规划(DP)算法解决特定字符串匹配问题的方法。通过将问题分为以'('结尾的第一类和以'a'结尾的第二类,作者详细介绍了如何构建状态转移方程并实现高效求解。代码示例展示了具体实现过程,包括初始化、状态转移及最终输出结果。

被折叠的 条评论
为什么被折叠?



