提交时间:2022-07-20 11:58:40

运行 ID: 52799

#include <bits/stdc++.h> using namespace std; int n,m,k; long long ans,md=1e9+7; inline long long cal(long long x,int p) { long long ans=1; while(p) { if(p%2==1) ans=(ans*x)%md; x=(x*x)%md; p>>=1; } return ans; } void dfs(int x,int lst,int val,long long cnt) { if(x==k) { ans=(ans+cnt+cal(val,m))%md; return ; } for(int i=lst; i<=val; i++) { if((val-i)>=i) dfs(x+1,i,val-i,(cnt+cal(i,m))%md); } } int main() { scanf("%d%d%d",&n,&k,&m); dfs(1,1,n,0); printf("%lld\n",ans); return 0; }