#include <bits/stdc++.h> int n, m, mod; int wynik; int dp[5003][5003][2]; int main() { scanf("%d%d%d", &n, &m, &mod); for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) dp[i][j][1]=1; for(int k=2; k<=n; k++) { for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) dp[i][j][k&1]=0; for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) for(int p=1; p<=m; p++) for(int q=p; q<=m; q++) { if(j<p || q<i) continue; dp[p][q][k&1]=(dp[p][q][k&1]+dp[i][j][(k-1)&1])%mod; } } for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) wynik=(wynik+dp[i][j][n&1])%mod; printf("%d\n", wynik); }
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> int n, m, mod; int wynik; int dp[5003][5003][2]; int main() { scanf("%d%d%d", &n, &m, &mod); for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) dp[i][j][1]=1; for(int k=2; k<=n; k++) { for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) dp[i][j][k&1]=0; for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) for(int p=1; p<=m; p++) for(int q=p; q<=m; q++) { if(j<p || q<i) continue; dp[p][q][k&1]=(dp[p][q][k&1]+dp[i][j][(k-1)&1])%mod; } } for(int i=1; i<=m; i++) for(int j=i; j<=m; j++) wynik=(wynik+dp[i][j][n&1])%mod; printf("%d\n", wynik); } |