#include <bits/stdc++.h>
using namespace std;
typedef long long lld;
typedef pair<int,int> pii;
typedef pair<lld,lld> pll;
typedef vector<int> vint;
#define ff first
#define ss second
#define mp make_pair
#define pb push_back
lld dp[5120][5120];
lld p[5120][5120];
lld n, m, mod;
int main(){
scanf("%lld%lld%lld",&n,&m,&mod);
//puts("dp:");
for(lld i=1;i<=m;++i){
for(lld j=1;i+j-1<=m;++j){
dp[i][j]=1;
//printf("%lld ",dp[i][j]);
}
//puts("");
}
//puts("p:");
for(lld i=1;i<=m;++i){
p[i][1]=dp[i][1];
//printf("%lld ",p[i][1]);
}
//puts("");
for(lld j=2;j<=m;++j){ //długość przedziału
for(lld i=1;i+j-1<=m;i++){ //po początkach
p[i][j]=(p[i][j-1]+p[i+1][j-1]+mod-p[i+1][j-2]+dp[i][j])%mod;
//printf("%lld ",p[i][j]);
}
//puts("");
}
while(--n){
//puts("dp:");
for(lld j=1;j<=m;++j){
for(lld i=1;i+j-1<=m;++i){
dp[i][j]=(p[1][m]+mod+mod-p[1][i-1]-p[i+j][m+1-i-j])%mod;
//printf("%lld ",dp[i][j]);
}
//puts("");
}
//puts("p:");
for(lld i=1;i<=m;++i){
p[i][1]=dp[i][1];
//printf("%lld ",p[i][1]);
}
//puts("");
for(lld j=2;j<=m;++j){ //długość przedziału
for(lld i=1;i+j-1<=m;i++){ //po początkach
p[i][j]=(p[i][j-1]+p[i+1][j-1]+mod-p[i+1][j-2]+dp[i][j])%mod;
//printf("%lld ",p[i][j]);
}
//puts("");
}
}
printf("%lld",p[1][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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <bits/stdc++.h> using namespace std; typedef long long lld; typedef pair<int,int> pii; typedef pair<lld,lld> pll; typedef vector<int> vint; #define ff first #define ss second #define mp make_pair #define pb push_back lld dp[5120][5120]; lld p[5120][5120]; lld n, m, mod; int main(){ scanf("%lld%lld%lld",&n,&m,&mod); //puts("dp:"); for(lld i=1;i<=m;++i){ for(lld j=1;i+j-1<=m;++j){ dp[i][j]=1; //printf("%lld ",dp[i][j]); } //puts(""); } //puts("p:"); for(lld i=1;i<=m;++i){ p[i][1]=dp[i][1]; //printf("%lld ",p[i][1]); } //puts(""); for(lld j=2;j<=m;++j){ //długość przedziału for(lld i=1;i+j-1<=m;i++){ //po początkach p[i][j]=(p[i][j-1]+p[i+1][j-1]+mod-p[i+1][j-2]+dp[i][j])%mod; //printf("%lld ",p[i][j]); } //puts(""); } while(--n){ //puts("dp:"); for(lld j=1;j<=m;++j){ for(lld i=1;i+j-1<=m;++i){ dp[i][j]=(p[1][m]+mod+mod-p[1][i-1]-p[i+j][m+1-i-j])%mod; //printf("%lld ",dp[i][j]); } //puts(""); } //puts("p:"); for(lld i=1;i<=m;++i){ p[i][1]=dp[i][1]; //printf("%lld ",p[i][1]); } //puts(""); for(lld j=2;j<=m;++j){ //długość przedziału for(lld i=1;i+j-1<=m;i++){ //po początkach p[i][j]=(p[i][j-1]+p[i+1][j-1]+mod-p[i+1][j-2]+dp[i][j])%mod; //printf("%lld ",p[i][j]); } //puts(""); } } printf("%lld",p[1][m]); return 0; } |
English