#include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; long long dp[3009]; const long long M = 1e9 + 7; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long n, m, a = 1, b, c; cin>>n>>m; dp[1] = 0; dp[2] = 1; for(int i=3; i<=n; i++) { a = (a * m) % M; b = 0; for(int j=2; j<=i-2; j++) { c = (dp[j] * dp[i-j]) % M; b = (b + c) % M; } dp[i] = ((m - 1) * b) % M; dp[i] = (dp[i] + a) % M; } cout<<(dp[n] * m) % M; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include<bits/stdc++.h> #define fi first #define se second #define pb push_back using namespace std; long long dp[3009]; const long long M = 1e9 + 7; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); long long n, m, a = 1, b, c; cin>>n>>m; dp[1] = 0; dp[2] = 1; for(int i=3; i<=n; i++) { a = (a * m) % M; b = 0; for(int j=2; j<=i-2; j++) { c = (dp[j] * dp[i-j]) % M; b = (b + c) % M; } dp[i] = ((m - 1) * b) % M; dp[i] = (dp[i] + a) % M; } cout<<(dp[n] * m) % M; return 0; } |