【Ybtoj 第1章 例题4】传球游戏【递推】

题目描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


解题思路
f ( i , j ) f(i,j) f(i,j)表示传球经过j个人后在第 i i i个同学手上的方案数,很显然同学i的球会由 i − 1 i-1 i1 i + 1 i+1 i+1传过来,故可得递推式: f ( i , j ) = f ( i − 1 , j − 1 ) + f ( i + 1 , j − 1 ) f(i,j)=f(i-1,j-1)+f(i+1,j-1) f(i,j)=fi1j1+f(i+1,j1)

PS:由于本题是一个环,1和n可以连通,要特判这两个地方。


代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,f[30][20]; 
int main(){
    
    
	scanf("%d%d",&n,&m);
	f[1][0]=1;
	for(int j=1;j<=m;j++)
	{
    
    
		for(int i=1;i<=n;i++)
		{
    
    
			if(i==n)
				f[i][j]=f[1][j-1]+f[n-1][j-1];
			else if(i==1)
				f[i][j]=f[n][j-1]+f[2][j-1];
			else f[i][j]=f[i-1][j-1]+f[i+1][j-1];
		}
	}
	printf("%d",f[1][m]);
}

猜你喜欢

转载自blog.csdn.net/kejin2019/article/details/111637596