Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52817 | Hyper5Q | 数学,很美妙吧 | C++ | 解答错误 | 10 | 65 MS | 66720 KB | 852 | 2022-07-20 12:01:21 |
#include<bits/stdc++.h> #define int long long using namespace std; const int N=5000+5; const int mod=1e9+7; int n,k,m; int p[N][N]; int ans; void get_p(int x,int y) { p[0][0]=1; for(int i=1;i<=x;++i) { for(int j=1;j<=y;++j) { if(i<j)continue; p[i][j]=p[i-1][j-1]+p[i-j][j]; } } } int f(int x,int y,int t) { if(x<=0||y<=0||p[x][y]==0)return 0; if(x-t>0&&y-1>0&&p[x-t][y-1]>0)return (f(x-t,y-1,t)+p[x-t][y-1])%mod; else return 0; } int pow(int x,int y) { if(y==1)return x; if(y==0)return 1; int res=pow(x,y/2); if(y%2==0)return (res*res)%mod; else return (res*res*x)%mod; } signed main() { scanf("%lld%lld%lld",&n,&k,&m); get_p(n,k); for(int i=1;i<=n;++i) { //cout<<f(n,k,i)<<" "<<n<<" "<<k<<" "<<i<<endl; ans=(ans+pow(i,m)*f(n,k,i))%mod; } printf("%lld\n",ans); }