题意:n个人排成一队,从头开始往后传递消息,第i号人能直接传给第 i+1,i+2.....i+m号,求从头传到尾共有多少种传法
分析:可以知道每个人的选择都影响最终的顺序,有一种环环相扣的关联在,所以用dp
dp[i]表示从第i号人到尾的传法数,方程:dp[j]=dp[i]+dp[j] 其中 i - j < = m
代码:
#include<iostream>
#include<cstring>
using namespace std;
int dp[100],n,m;
int main()
{
while(cin>>n>>m){
if(!n&&!m) break;
memset(dp,0,sizeof(dp));
dp[n]=1;
for(int i=n;i>0;i--){
for(int j=i-1;j>0;j--){
if(i-j<=m) dp[j]+=dp[i];
}
}
cout<<dp[1]<<endl;
}
}