#include<iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, p; cin >> n >> m >> p; long long dp[2][m + 7][m + 7]; for(int i = 0;i < m;i++) fill(dp[0][i], dp[0][i] + m, 1); for(int i = 1;i < n;i++) for(int beg1 = 0;beg1 < m;beg1++){ fill(dp[i & 1][beg1], dp[i & 1][beg1] + m, 0); for(int end1 = beg1;end1 < m;end1++) for(int beg2 = 0;beg2 <= end1;beg2++) for(int end2 = max(beg1, beg2);end2 < m;end2++) dp[i & 1][beg1][end1] = (dp[i & 1][beg1][end1] + dp[(i + 1) & 1][beg2][end2]) % p; } long long result = 0; for(int beg = 0;beg < m;beg++) for(int end = beg;end < m;end++) result = (result + dp[(n - 1) & 1][beg][end]) % p; cout << result << '\n'; }
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 | #include<iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, p; cin >> n >> m >> p; long long dp[2][m + 7][m + 7]; for(int i = 0;i < m;i++) fill(dp[0][i], dp[0][i] + m, 1); for(int i = 1;i < n;i++) for(int beg1 = 0;beg1 < m;beg1++){ fill(dp[i & 1][beg1], dp[i & 1][beg1] + m, 0); for(int end1 = beg1;end1 < m;end1++) for(int beg2 = 0;beg2 <= end1;beg2++) for(int end2 = max(beg1, beg2);end2 < m;end2++) dp[i & 1][beg1][end1] = (dp[i & 1][beg1][end1] + dp[(i + 1) & 1][beg2][end2]) % p; } long long result = 0; for(int beg = 0;beg < m;beg++) for(int end = beg;end < m;end++) result = (result + dp[(n - 1) & 1][beg][end]) % p; cout << result << '\n'; } |