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

动态规划——传球问题

题目链接:1.传球游戏 - 蓝桥云课 (lanqiao.cn)

本题关键在于动态规划的数组设计,以及围坐一圈时索引的变化。

首先是动态规划,由于是求球传递m次回到第一位同学,那么就可以设计成一个二维数组,每个位置代表的是,这是第几次传递,传递到了哪位同学的手上。所以最后只要给出第m次传递,且在0号同学手上的方案数,也就是dp[m][0]。

其中最重要的算法是dp[i][j]+=dp[i-1][(j+1)%n]+dp[i-1][(j-1+n)%n],意思是第i次传递时球在j号同学手上的方案数,他的值等于本次传递是位于他索引下一位的同学传来的和他索引上一位的同学传来的的方案总数,大概思路如图:

 (其中,索引的变化可以写作(j+1)%n,(j-1+n)%n,分别表示该索引的下一位和上一位,对n取模是为了让索引可以循环出现,如还不懂,可以通过加深印象,记住就好了)

package lanqiao;import java.util.Arrays;
import java.util.Scanner;/*** 2023/11/30*/
public class lanqiao525_传球游戏 {public static void main(String[] args){Scanner scan=new Scanner(System.in);int n=scan.nextInt();//同学人数int m=scan.nextInt();//传递次数int[][] dp=new int[m+1][n];//第m次传递到n号同学时的方法数dp[0][0]=1;//还未进行传递时的方案数for (int i=1;i<=m;i++){for (int j=0;j<n;j++){dp[i][j]+=dp[i-1][(j+1)%n]+dp[i-1][(j-1+n)%n];//因为是围坐在一起,所以序号是循环的,如123412}}System.out.println("方案数为:"+dp[m][0]);//需要得出的是经过m次传递,球回到第一位同学手中的方案数}
}
3 3 
方案数为:2进程已结束,退出代码为 0

 

 

http://www.lryc.cn/news/320279.html

相关文章:

  • Spring: 文件服务使用spring.web.resources.static-locations配置实现文件预览功能
  • 分享常用的62 个九宫格抽奖及各种宫格效果源码
  • 【Stable Diffusion】入门-03:图生图基本步骤+参数解读
  • 数学建模-多目标规划算法(美赛建模)
  • 安装、配置MySQL
  • C++面试100问(九)
  • 出海品牌必备指南:海外网红营销5大底层逻辑解析
  • Linux/Ubuntu/Debian的终端中和的区别
  • docker compose部署opensearch集群
  • 粤嵌6818开发板通过MobaXterm使用SSH连接开发板
  • Python实战:Flask轻量级web框架入门
  • docker 安装minio,详细图解
  • 【SpringBoot】请求与响应参数 IoC与DI 总结
  • 100道面试必会算法-05-字符串转换整数 (atoi)
  • Ypay源支付2.8.8免授权聚合免签系统
  • 从零到一构建短链接系统(三)
  • C语言易错知识点:scanf函数
  • 如何实现图片上传至服务器
  • OSPF协议全面学习笔记
  • acwing算法提高之搜索--剪枝
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇
  • TPU浅谈
  • 华为OD机试 - 求字符串中所有整数的最小和(Java JS Python C C++)
  • goland设置保存文件时不将4个空格转为TAB
  • 基于Linux内核的socket编程(TCP)的C语言示例
  • 【WEEK3】 【DAY4】JSON交互处理第三部分【中文版】
  • 下载chromedrive,使用自动化
  • D-Star 寻路算法
  • mysql5.7编译安装
  • Java项目实战记录:雷达数据渲染