#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); } |
English