传球游戏(递归水文)

所以说在被递归暴力的狠狠的虐了之后,我终于也可以虐递归啦(不存在的),于是怀着对汉诺塔的敬意和对递归的迷茫敲下了这篇总结,请记住:万物皆虚,万世皆允(划掉)。

最初开始看递归的时候,我是被逼得想从9楼信仰之跃的(虽然我那会还没开始玩刺客信条……),总之就是很懵,现在还好。

总之递归就是一种调用自身进行运算的骚操作,当然,我知道这么说你们也不懂,我们用数学函数一种类似的做法来表示以方便理解,f(f(f(f(f(x-2))))),那么从这个函数我们可以看出来,这是一种将大问题向下化为小问题,在通过小问题逆向推导出大问题的做法,以这个函数举例,要想求出最终解,首先要求出x-2,然后一层一层进行运算,当然,递归与这种函数具有很大的差距。

递归的一般形式就不打了,来谈谈递归的运行,大量的内容在书上已经很是详尽了,所以我们用具体题目来理解递归:

那么这道题是一道不算难的题目,其主要思想在于分情况讨论,然后就是,纯递归会因为运行过慢爆掉,所以我们用空间换时间的思想,用记忆化搜索解决

代码如下:

#include <iostream>

#include <iomanip>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <cstdio>

using namespace std;

int n,m;

int ans=0;

int f[50][50];

int cq(int k,int x)//k次传,x个小学生

{

if(f[k][x]>=0) return f[k][x];

if(k==m)//边界,如果传球次数达到m,结束递归

{

if(x==1)

return 1;

return 0;

}

if(x==n) //特判,当传到第n个人手里时

{

f[k][x]=cq(k+1,n-1)+cq(k+1,1);

}

else

if(x==1) //特判,当传到第1个手里时

{

f[k][x]=cq(k+1,n)+cq(k+1,2);

}

else //正常传球方式

{

f[k][x]=cq(k+1,x+1)+cq(k+1,x-1);

}

return f[k][x];

}

int main()

{

cin>>n>>m;

memset(f,-1,sizeof(f));

f[m][1]=1;

cout<<cq(0,1);

return 0;

}

从这道题,我们就可以较为清楚了理解递归的基础思维,至于更深层次的?自己翻dalao的博客去,你们不能指望我一个蒟蒻写什么高深的东西。

时间: 2024-10-12 23:05:02

传球游戏(递归水文)的相关文章

tyvj1008 传球游戏

背景 NOIP2008复赛普及组第三题 描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种

Luogu P1057 传球游戏(dp 递推)

P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视

简单的传球游戏(矩阵)

简单的传球游戏 Time Limit: 1000ms    Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main K(3<=K<=10^9)个人互相传球,某人接球后立即传给别人.假定初始状态球在甲手中,并将甲发球作为第一次传球过程.求经过N(N<=10^9)次传球后,球又回到甲手中的传球方案数,输出这个数模10^9+7后的结果. Input 第一行是一个整数T(T<=20000

P1057 传球游戏

P1057 传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视

NOIP2008普及组传球游戏(动态规划)——yhx

题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视作不同的方 法,当且仅

传球游戏

描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出了一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视作不同的方法,当且仅当这两

[NOIP2008] 传球游戏

1011. [NOIP2008] 传球游戏 http://cogs.pro/cogs/problem/problem.php?pid=1011 ★   输入文件:ballg.in   输出文件:ballg.out   简单对比时间限制:1 s   内存限制:50 MB [问题描述] 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两

NOIP2008 普及组T3 传球游戏 解题报告-S.B.S.

题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视作不同的方法,当且仅当

luogu P1057 传球游戏

题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师在此吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目. 聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m次以后,又回到小蛮手里.两种传球方法被视作不同的方法,当且仅当

Codevs 1148 == 洛谷 P1057 传球游戏

1148 传球游戏 2008年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没传出去的那个同学就是败者,要给大家表演