这个要把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; }