#include <bits/stdc++.h> using namespace std; long long dp[2][2][10000007]; long long hp[10000007]; long long n,m,mod; int main(){ cin>>n>>m>>mod; for(long long i=1;i<=m;i++){ dp[(n)%2][1][i]=m-i+1; dp[(n)%2][0][i]=(i-1)*(m-i+1)%mod; // cout<<dp[n%2][0][i]<<' '<<dp[n%2][1][i]<<'\n'; } // cout<<'\n'; for(long long i=n-1;i>0;i--){ for(int j=1;j<=m;j++){ long long w=dp[(i+1)%2][0][j]; for(int k=j;k<=m;k++){ w+=dp[(i+1)%2][1][k]; w%=mod; hp[k]=w; /* for(int l=j;l<=k;l++){ w+=dp[(i+1)%2][1][l]; w%=mod; } dp[i%2][1][j]+=w; for(int l=j+1;l<=k;l++){ dp[i%2][0][l]+=w; dp[i%2][0][l]%=mod; } */ // cout<<j<<' '<<k<<' '<<w<<'\n'; } long long w2=0; for(int k=m;k>=j;k--){ w2+=hp[k]; w2%=mod; dp[i%2][(k==j)][k]+=w2; dp[i%2][(k==j)][k]%=mod; } } for(int j=1;j<=m;j++) { // cout<<dp[i%2][0][j]<<' '<<dp[i%2][1][j]<<'\n'; dp[(i+1)%2][0][j]=0; dp[(i+1)%2][1][j]=0; } // cout<<'\n'; } long long w=0; for(int i=1;i<=m;i++){ w+=dp[1][1][i]; } cout<<w%mod; }
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 | #include <bits/stdc++.h> using namespace std; long long dp[2][2][10000007]; long long hp[10000007]; long long n,m,mod; int main(){ cin>>n>>m>>mod; for(long long i=1;i<=m;i++){ dp[(n)%2][1][i]=m-i+1; dp[(n)%2][0][i]=(i-1)*(m-i+1)%mod; // cout<<dp[n%2][0][i]<<' '<<dp[n%2][1][i]<<'\n'; } // cout<<'\n'; for(long long i=n-1;i>0;i--){ for(int j=1;j<=m;j++){ long long w=dp[(i+1)%2][0][j]; for(int k=j;k<=m;k++){ w+=dp[(i+1)%2][1][k]; w%=mod; hp[k]=w; /* for(int l=j;l<=k;l++){ w+=dp[(i+1)%2][1][l]; w%=mod; } dp[i%2][1][j]+=w; for(int l=j+1;l<=k;l++){ dp[i%2][0][l]+=w; dp[i%2][0][l]%=mod; } */ // cout<<j<<' '<<k<<' '<<w<<'\n'; } long long w2=0; for(int k=m;k>=j;k--){ w2+=hp[k]; w2%=mod; dp[i%2][(k==j)][k]+=w2; dp[i%2][(k==j)][k]%=mod; } } for(int j=1;j<=m;j++) { // cout<<dp[i%2][0][j]<<' '<<dp[i%2][1][j]<<'\n'; dp[(i+1)%2][0][j]=0; dp[(i+1)%2][1][j]=0; } // cout<<'\n'; } long long w=0; for(int i=1;i<=m;i++){ w+=dp[1][1][i]; } cout<<w%mod; } |