dp[i]+=dp[i-j];
dp[i]表示传到第i个位置有多少种方法
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <stdio.h>
#include <string.h>
int main()
{
int n,m,i,j,dp[40];
while (scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)break;
memset(dp,0,sizeof(dp));
dp[1]=1;
for (i=2;i<=n;i++)
{
for (j=0;j<=m;j++)
{
if(i>j)dp[i]+=dp[i-j];
}
}
printf("%d\n",dp[n]);
}
return 0;
}