当前位置: 首页 > news >正文

蓝桥试题:传球游戏(二维dp)

一、题目描述

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的: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) 。

输出描述

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

输入输出样例

示例 1

输入

3 3

输出 

2

二、代码演示 

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
   public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] dp = new int[m + 1][n];
        dp[0][0] = 1;
        for (int i = 1; i <= m  ; i++) { //第i次传球到j号同学的方案数
            for (int j = 0; j < n; j++) {
                dp[i][j] += dp[i - 1][(j + 1 + n) % n] + dp[i - 1][(j - 1 + n) % n];
            }
        }
        System.out.println(dp[m][0]);
    }
}

这段代码使用动态规划来解决传球问题,计算经过m次传球后球回到初始同学(0号)的方案数。以下是代码的详细解释:

  1. 动态规划数组初始化

    • dp[i][j]表示经过i次传球后,球到达j号同学的方案数。

    • 初始状态dp[0][0] = 1表示0次传球时球在0号同学手中。

  2. 状态转移

    • 对于每次传球i(从1到m),遍历每个同学j(从0到n-1)。

    • 当前状态dp[i][j]由上一次传球到j的左右相邻同学的方案数之和得到。

    • 左右相邻同学通过取模运算处理环状结构,确保索引在有效范围内。

    • 逻辑

      • 每次传球只能传给 相邻同学(环形结构)。

      • 因此,球到达j号的方案数等于:

        • 前一次球在 j号左侧同学手中的方案数((j - 1 + n) % n

        • 加上 前一次球在 j号右侧同学手中的方案数((j + 1 + n) % n)。

    • 环形结构的处理

      • (j + 1 + n) % n:获取j号右侧同学的索引(自动处理j=n-1时的循环)。

      • (j - 1 + n) % n:获取j号左侧同学的索引(避免j=0时出现负数)。

相关文章:

  • 基于海思soc的智能产品开发(芯片sdk和linux开发关系)
  • unity console日志双击响应事件扩展
  • C#核心(21)万物之父Object中的方法
  • Lambda表达式使用介绍
  • 【Bootstrap5】Bootstrap5学习笔记
  • 数据库复习(第五版)- 第七章 数据库设计
  • 3.6c语言
  • 【算法系列】基数排序
  • 维度建模事实表技术基础解析(以电商场景为例)
  • 洛谷 P1480 A/B Problem(高精度详解)c++
  • 相机几何与标定:从三维世界到二维图像的映射
  • 【LeetCode101】对称二叉树
  • 逐梦DBA:MySQL的编码设置
  • PWM子系统芯片驱动源码pwm-tegra.c分析
  • leetcode15 三数之和
  • ruoyi框架接入kkFileView
  • 侯捷 C++ 课程学习笔记:深入理解C++内存管理与类对象构造全过程
  • 【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
  • 第005文-模拟入侵网站实现0元购
  • µCOS-III从入门到精通 第八章(时间片调度)
  • 高温最强时段来了!北方局地高温有明显极端性
  • 解放日报“解码上海AI产业链”:在开源浪潮中,集聚要素抢先机
  • 旅马大熊猫“福娃”“凤仪”平安回国
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 深圳南澳码头工程环评将再次举行听证会,项目与珊瑚最近距离仅80米