提交时间:2022-07-20 12:12:20

运行 ID: 52925

#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll M=1e9+7; ll p[5003],t[5003]; ll qpow(ll a,int b) { ll sum=1; while(b) { if(b & 1) sum=sum*a%M; a=a*a%M,b>>=1; } return sum; } void DFS(int s,int sum,int k) { if(k==1) { ++t[sum]; return ; } for(int i=s; sum-i>=i; ++i) { ++t[i]; DFS(i,sum-i,k-1); } return ; } int main() { int n,m,k; ll ans=0; cin>>n>>k>>m; for(ll i=1; i<=n; ++i) p[i]=qpow(i,m); DFS(1,n,k); for(int i=1; i<=n; ++i) ans=(ans+t[i]*p[i]%M)%M; cout<<ans<<'\n'; return 0; }