#include<bits/stdc++.h> #define f first #define s second using namespace std; int const M=1e7+21; long long dp[2][M],P[2][M]; int main() { int n,m,p; cin>>n>>m>>p; P[0][m]=1; for(int i=1;i<=n;i++) { long long H=0; for(int j=1;j<=m;j++) { dp[1][j]=j*(P[0][m]-P[0][m-j])-H; dp[1][j]%=p; if(dp[1][j]<0) dp[1][j]+=p; P[1][j]=P[1][j-1]+dp[1][j]; P[1][j]%=p; H+=P[0][j]; H%=p; } for(int j=1;j<=m;j++) { dp[0][j]=dp[1][j]; P[0][j]=P[1][j]; } } cout<<P[1][m]; }
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> #define f first #define s second using namespace std; int const M=1e7+21; long long dp[2][M],P[2][M]; int main() { int n,m,p; cin>>n>>m>>p; P[0][m]=1; for(int i=1;i<=n;i++) { long long H=0; for(int j=1;j<=m;j++) { dp[1][j]=j*(P[0][m]-P[0][m-j])-H; dp[1][j]%=p; if(dp[1][j]<0) dp[1][j]+=p; P[1][j]=P[1][j-1]+dp[1][j]; P[1][j]%=p; H+=P[0][j]; H%=p; } for(int j=1;j<=m;j++) { dp[0][j]=dp[1][j]; P[0][j]=P[1][j]; } } cout<<P[1][m]; } |