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

蓝桥杯算法心得——李白打酒(加强版)

大家好,我是晴天学长,记忆化搜索,找到技巧非常重要,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪

在这里插入图片描述

2) .算法思路

1.memo三维表示记录的结果


3).算法步骤

1.首先导入需要的类和包,包括 java.util.Scanner。
2.创建一个公共类 Main。
3.声明一个静态变量 mod 并初始化为 1000000007,用于取模操作。
4.声明一个三维数组 memo,用于存储中间计算结果。
5.在 main 方法中,创建一个 Scanner 对象来读取输入。
6.通过 scanner.nextInt() 方法分别读取输入的 N 和 M 的值。
7.初始化变量 sum 为 2。
8.创建大小为 101x101x101 的 memo 数组,并将其所有元素初始化为 -1。
9.调用 dfs 方法,并将 sum、N 和 M 作为参数传递给它。
10.在控制台打印输出 dfs 方法的返回值。
11.定义 dfs 方法,接收 sum、N 和 M 作为参数。
12.首先进行递归终止条件的判断,如果 sum 等于 1,N 等于 0,M 等于 1,返回 1。
13.进行剪枝操作,如果 sum 小于 0,N 小于 0 或 M 小于 0,返回 0。
14.如果 sum 大于 M,返回 0。
15.检查 memo[sum][N][M] 是否已经计算过,如果有值,则直接返回该值。
16.如果没有计算过,进行递归计算并将结果保存到 memo 数组中。
17.递归调用 dfs 方法,传入 sum*2、N-1 和 M 作为新的参数,并将结果与递归调用 dfs 方法,传入 18.sum-N 和 M-1 作为新的参数的结果相加,并对 mod 取模。
19.将结果保存到 memo 数组中,并返回该值。


4). 代码实例

import java.util.Scanner;public class Main {static int mod = 1000000007;static int[][][] memo;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();int M = scanner.nextInt();int sum = 2;memo = new int[101][101][101];for (int i = 0; i < 101; i++) {for (int j = 0; j < 101; j++) {for (int k = 0; k < 101; k++) {memo[i][j][k] = -1; // 初始化dp数组为-1}}}System.out.println(dfs(sum, N, M));}//口枝叶回//酒喝光了遇到店是合法的,最后一次是定了的private static int dfs(int sum ,int N,int M) {if (sum==1&&N==0&&M==1) {return 1;}//剪枝if (sum<0||N<0||M<0) {return 0;}if (sum > M) return 0;if (memo[sum][N][M]!=-1) {return memo[sum][N][M];}memo[sum][N][M]=(dfs(sum*2, N-1, M)+dfs(sum-1, N,M-1))%mod;return memo[sum][N][M];}
}

5). 总结

  • dp和记忆化搜索的熟练掌握。

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

相关文章:

  • java练习2
  • 【安装笔记-20240523-Windows-安装测试 ShareX】
  • 2024年150道高频Java面试题(七十一)
  • 【深度学习】2.单层感知机
  • JS经常碰见的报错问题
  • 纯前端实现截图功能
  • 【网络协议】应用层协议--HTTP
  • 【图书推荐】《Vue.js 3.x+Element Plus从入门到精通(视频教学版)》
  • 抖店如何打造出爆品?学好这几招,轻松打爆新品流量
  • 软件需求规范说明模板
  • vs2013使用qt Linguist以及tr不生效问题
  • Leetcode 3163. String Compression III
  • Java匿名内部类的使用
  • 把自己的垃圾代码发布到官方中央仓库
  • 单机一天轻松300+ 最新微信小程序拼多多+京东全自动掘金项目、
  • 线性回归模型之套索回归
  • 解决文件夹打开出错问题:原因、数据恢复与预防措施
  • Spring:面向切面(AOP)
  • 本地镜像文件怎么导入docker desktop
  • 【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现
  • Gradle筑基——Gradle Maven仓库管理
  • c++11:智能指针的种类以及使用场景
  • RabbitMQ-默认读、写方式介绍
  • 阿里云百炼大模型使用
  • 亲测有效,通过接口实现完美身份证号有效性验证+身份证与姓名匹配查询身份实名认证接口(实时)
  • 试题11 输出什么?
  • 对vue3/core源码ref.ts文件API的认识过程
  • AWS迁移与传输之AWS DMS
  • 【ML Olympiad】预测地震破坏——根据建筑物位置和施工情况预测地震对建筑物造成的破坏程度
  • kafka监控配置和告警配置