题目大意:有N个苹果要放进K个篮子里(n,k<=100),可以有篮子是空的,问有多少种方法。(2,1)和(1,2)属于同一种
考察点:DP
思路分析:状态转移方程,我们假设f[i][j]表示有i个苹果放入j个篮子里,那么f[i][j]=f[i][j-1]+f[i-j][j],意思就是先考虑留一个空篮子,那么就是f[i][j-1],那么只要再加上一个空篮子不留的就行了,即f[i-j][j]。此二维方程还可压缩成一维,f[i]+=f[i-j]。
这题其实思考了挺久。。太久没做DP了手生
#include<stdio.h>
long int f[110];
int n,k;
int main()
{
int i,j;
while (scanf("%d%d",&n,&k)!=EOF)
{
f[0]=1;
for (i=1;i<=109;i++)
{f[i]=0;}
for (i=1;i<=k;i++)
for (j=i;j<=n;j++)
f[j]+=f[j-i];
printf("%d\n",f[n]);
}
return 0;
}