时间:1s 空间:256M
题目描述:
小信过生日了,家里来了n个朋友,小信要给他们分蛋糕。小信有重量为k的蛋糕,已知每个盘子最多能装重量为m的蛋糕,且至少要给朋友分重量为1的蛋糕(小信可以不吃),请问小信有几种分蛋糕的方法。
由于答案可能非常大,输出答案模998244353。
输入格式:
第一行包含三个整数 n,m,k,表示朋友数,盘子最多能装的蛋糕重量,蛋糕总重量。
输出格式:
输出一个整数表示答案。
超级DP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,w,ans;
int f[52][2505],mod=998244353;
int dp(int x,int now){
if(now>w)return 0;
if(x>n){
if(now<=w)return 1;
return 0;
}
if(f[x][now]!=-1)return f[x][now];
int res=0;
for(int i=1;i<=min(m,w-now);i++){
res+=dp(x+1,now+i);
res%=mod;
}
return f[x][now]=res%mod;
}
signed main(){
memset(f,-1,sizeof f);
cin>>n>>m>>w;
cout<<dp(1,0);
return 0;
}