Description
The contest’s message distribution is a big thing in prepare. Assuming N students stand in a row, from the row-head start transmit message, each person can transmit message to behind M personals, and how many ways could row-tail get the message?
Input
Input may contain multiple test cases. Each case contains N and M in one line. (0<=M<N<=30)
When N=0 and M=0, terminates the input and this test case is not to be processed.
When N=0 and M=0, terminates the input and this test case is not to be processed.
Output
Output the ways of the Nth student get message.
Sample Input
4 1 4 2 0 0
Sample Output
1 3
Hint
4 1 : A->B->C->D 4 2 : A->B->C->D, A->C->D, A->B->D
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
using namespace std;
const int MAXN=30+9;
const int MAXM=50+9;
const int inf=0x3f3f;
int dp[MAXN];
int n,m;
int main()
{
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0) break;
memset(dp,0,sizeof(dp));
dp[1]=1;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if((i+j)<=n)
dp[i+j]+=dp[i];
}
}
printf("%d\n",dp[n]);
}
return 0;
}