博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯 传球游戏 动态规划
阅读量:4679 次
发布时间:2019-06-09

本文共 1035 字,大约阅读时间需要 3 分钟。

题目描述

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

数据规模和约定

100%的数据满足:3< =n< =30,1< =m< =30

输入

共一行,有两个用空格隔开的整数n,m(3< =n< =30,1< =m< =30)。
输出
t共一行,有一个整数,表示符合题意的方法数。
样例输入
3 3
样例输出
2

思路:动态规划f[i][j]表示的集合是第i次到j的方案,记录的是数量,状态转移显然是f[i][j]=f[i-1][at(j-1)]+f[i-1][at(j+1)]

#include
using namespace std;const int N = 35;int f[N][N];int n,m;int at(int x){ if(x==n+1){ return 1; } if(x==0){ return n; } return x;}int main(){ cin>>n>>m; //base case f[1][2]=1; f[1][n]=1; //dp for(int i=2;i<=m;++i){ for(int j=1;j<=n;++j){ f[i][j]=f[i-1][at(j-1)]+f[i-1][at(j+1)]; } } //output cout<
<

转载于:https://www.cnblogs.com/clear-love/p/11335870.html

你可能感兴趣的文章
windows平板的开发和选型
查看>>
无平方因子的数(数论初步) By ACReaper
查看>>
C语言截取字符串
查看>>
如何查自己的账单
查看>>
JAVA8学习笔记(二)----三个预定义接口
查看>>
JDBC连接各种数据库的字符串
查看>>
构建之法阅读笔记06
查看>>
CentOS minimal新装配置笔记
查看>>
压缩映象原理的一个应用
查看>>
Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
查看>>
关于sql优化的一个小总结
查看>>
Java语言中的正则表达式
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
Linux进程间通信---共享内存
查看>>
Computer Information
查看>>
交换机/路由器上的 S口 F口 E口
查看>>
P1298(矩阵切割)DP
查看>>
wzplayer for delphi demo截图
查看>>