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