题目

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

输入
共一行,有两个用空格隔开的整数n,m(3< =n< =30,1< =m< =30)。

数据规模和约定
100%的数据满足:3< =n< =30,1< =m< =30

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

样例输入

3 3

样例输出

2

解题思路

本题是动态规划的问题,假设传球次数为m次,有3为小朋友,则传球过程可以下表描述:

小朋友编号 0 1 2 3 4 5
传球次数 0 1 0 0 1 0
1 0 0 1 1 0 0
2 0 2 1 1 2 0
3 0 2 3 3 2 0
m 0 a[m-1][0]+a[m-1][2]

表格中的第0和5列是为了方便第1和4列的运算,第1-3列代表的是3位小朋友,而又考虑到“小朋友围成圈”,因此,加入第4列,以表示首尾相接、方便第3列的运算。

表中的数据表示,传球过程当中,经第i次传球后,第j位小朋友手上有球的不同传球方式的数目。

代码

#include<stdio.h>
int main()
{int n,m,i,j;scanf("%d %d",&n,&m);int a[m+1][n+3];//行代表第i次传球,列代表第j各小朋友for (i=0;i<=m;i++)for (j=0;j<(n+3);j++)a[i][j] = 0;a[0][1] = 1;//初始状态时,球在1号小朋友手上a[0][n+1] = 1;//环形,首尾一致,方便运算for (i=1;i<=m;i++)//m次传球{for (j=1;j<=(n+1);j++)a[i][j] = a[i-1][j-1]+a[i-1][j+1];a[i][1] = a[i][1]+a[i][n+1];a[i][n+1] = a[i][1];}printf("%d",a[m][1]);return 0;
}

错误思路:
递归遍历每一种可能性,时间超限。

#include<stdio.h>
long int num = 0;
void tb(int a[], int n, int m, int s){int b[n],c[n],i,temp;int left=0,right=0;if (m!=0)//还有m步可以消耗{if (s<m || (n-s)<m)//既可以向左也可以向右{if ((m-n+s)%2==0 || (m-s)%2==0)//除了要走的步子之外,剩余消耗的步骤是偶数才可以走到终点{left = 1;right = 1;}}if (s==m)//向左走只有一条路{left = 0;//不需要遍历了num++;}if ((n-s)==m)//向右走只有一条路{right = 0;num++;}if (left==1)//向左走{for (i=0;i<n;i++)c[i] = a[i];if (s==0)temp = n-1;elsetemp = s-1;c[s] = 0;c[temp] = 1;tb(c,n,m-1,temp);}if (right==1)//向右走{for (i=0;i<n;i++)b[i] = a[i];if (s==(n-1))temp = 0;elsetemp = s+1;b[s] = 0;b[temp] = 1;tb(b,n,m-1,temp);}}else if (s==0)num++;
}int main()
{int i,m,n,s = 0;scanf("%d %d",&n,&m);int a[n];a[0]=1;//表示球在a[0]手里,首位都代表初始有球的人for (i=1;i<n;i++)a[i] = 0;tb(a,n,m,s);printf("%ld",num);return 0;
}

题目 1610: 传球游戏相关推荐

  1. 传球游戏【NOIP2008普及组】

    题目:传球游戏[NOIP2008普及组] 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里 ...

  2. 洛谷P1057 传球游戏(记忆化搜索)

    点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...

  3. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  4. 洛谷 1057——传球游戏(递推与递归二分)

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  5. P1057 传球游戏

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  6. 传球游戏(洛谷-P1057)

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: n 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每 ...

  7. Java 算法 传球游戏

    目录标题 题目描述 解题思路 代码 流程图 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手 ...

  8. 蓝桥杯 传球游戏 动态规划

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  9. CodeVs 1148 传球游戏

    CodeVs 1148 传球游戏 解题报告                                                      by MPS ------------------ ...

最新文章

  1. 打不开_网页打不开,怎解?
  2. [转]centos5.2用memcache 来作PHP 的session.save_handler
  3. SQLServer中使用Split功能分割字符串
  4. Unix网络协议分析
  5. win10下,cmd可以运行java,却不能运行javac
  6. 斯坦福大学深度学习与自然语言处理第三讲:高级的词向量表示
  7. docker rabbitmq_一文看懂Rabbitmq,从安装到实战演练
  8. 前端httpd+keepalived加后端heartbeat+nfs+drbd实现httpd服务的高效应用及资源统一管理...
  9. SQL数据库高级查询命令(3)
  10. 合数分解质数c语言算法,合数分解成质数之和问题探究
  11. java 重载 调用指定_java 方法重载的时候,同一个类,父子类,调用哪个方法的问题...
  12. 计算机原理与编程设计,最优化计算机原理与算法程序设计
  13. mysql基础之视图、事务、索引、外键
  14. Cannot load driver ‘C:\Keil_v5\ARM\Segger\JL2CM3.dll 报错解决方法。
  15. Intellij IDEA--导入导出配置
  16. 微信小程序之tab切换效果
  17. Java SE Lesson22_ClassLoader
  18. w7 声音图标不见了
  19. 2021财院ACM选拔赛题解
  20. 史上最全vue优化方案

热门文章

  1. JavaScript强制类型转换(三)Boolean布尔值型
  2. HBase Master工作机制、Master上线、Master下线
  3. 入行交互设计前要先明白的事
  4. DIY Mobile Phone
  5. 常见算法的时间复杂度
  6. HDU3999 The order of a Tree【二叉搜索树 + 前序遍历】
  7. 详解 MNIST 数据集
  8. BUUCTF:乌镇峰会种图
  9. logisim基本组件介绍
  10. Linux进程间通信:共享内存函数(shmget、shmat、shmdt、shmctl)及其范例