#include <bits/stdc++.h>
#define ll long long int
using namespace std;
const int maxn=3005;
const ll mod=1e9+7;
ll dp[maxn];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
ll m;
cin>>n>>m;
if(n==1)
cout<<"0";
else if(n==2)
cout<<m;
else
{
dp[1]=0;
dp[2]=m;
for(int i=3; i<=n; ++i)
{
dp[i]=0;
ll l=m;
for(int j=i-1; j>=1; --j)
{
if(l<=0)
break;
dp[i]+=(dp[j]*l)%mod;
dp[i]%=mod;
--l;
}
}
cout<<dp[n];
}
return 0;
}
// dp[i] = m*dp[i-1] + (m-1)*dp[i-2] + (m-2)*dp[i-3] ...
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 | #include <bits/stdc++.h> #define ll long long int using namespace std; const int maxn=3005; const ll mod=1e9+7; ll dp[maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; ll m; cin>>n>>m; if(n==1) cout<<"0"; else if(n==2) cout<<m; else { dp[1]=0; dp[2]=m; for(int i=3; i<=n; ++i) { dp[i]=0; ll l=m; for(int j=i-1; j>=1; --j) { if(l<=0) break; dp[i]+=(dp[j]*l)%mod; dp[i]%=mod; --l; } } cout<<dp[n]; } return 0; } // dp[i] = m*dp[i-1] + (m-1)*dp[i-2] + (m-2)*dp[i-3] ... |
English