2018-2-12--传球游戏

题目描述:

上体育课时,小蛮的老师经常带同学一起玩游戏。这次,他们又在玩传球游戏。
游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,可以向左右传球,当老师吹哨时停下,拿球的同学要给大家表演节目,小蛮想知道,当传球m次时,有多少种不同的传球方法可以使得从小蛮手里的球又回到小蛮手里。

输入:

共一行,包含两个用空格隔开的整数n,m。

输出:

共一行,一个整数,表示符合题意的方法数。

样例:

3 3

2

思路:

首先,看到这道题的数据大小,我第一瞬间就想到了直接进行搜索,然后求出所有状态,没想太多便开始实践,但由于数据可能会爆,所以我选择了记忆化搜索,记录之前已经搜过的步骤。下面是代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
int n,m,a[40][40];
bool is[40][40];
long long pass(int now,int rest)
{
	if(is[now][rest]){
		return a[now][rest];
	}
	if(now > n){
		now = 1;
	}
	else if(now < 1){
		now = n;
	}
	if(rest == 0){
		if(now == 1){
			a[now][rest] = 1;
			return a[now][rest];
		}
		return 0;
	}
	is[now][rest] = true;
	a[now][rest] = pass(now-1,rest-1)+pass(now+1,rest-1);
	return a[now][rest];
}
int main()
{
	cin >> n >> m;
	cout << pass(1,m);
	return 0;
}
这便是这道题的过程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值