#include <bits/stdc++.h> using namespace std; const int mod=1e9+7; long long DPg[3005][3005]; long long DPb[3005][3005]; int main() { ios_base::sync_with_stdio(0); int n,m; cin>>n>>m; DPg[0][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=min(n,m);j++) { DPg[i][j]=(DPg[i-1][j]*j + DPb[i-1][j]*j)%mod; DPb[i][j]=(DPb[i-1][j]*(m-j) + DPg[i-1][j-1]*(m-j+1))%mod; } } long long res=0; for(int i=0;i<=min(n,m);i++)res+=DPg[n][i]; cout<<res%mod<<endl; }
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 | #include <bits/stdc++.h> using namespace std; const int mod=1e9+7; long long DPg[3005][3005]; long long DPb[3005][3005]; int main() { ios_base::sync_with_stdio(0); int n,m; cin>>n>>m; DPg[0][0]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=min(n,m);j++) { DPg[i][j]=(DPg[i-1][j]*j + DPb[i-1][j]*j)%mod; DPb[i][j]=(DPb[i-1][j]*(m-j) + DPg[i-1][j-1]*(m-j+1))%mod; } } long long res=0; for(int i=0;i<=min(n,m);i++)res+=DPg[n][i]; cout<<res%mod<<endl; } |