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

【LeetCode】每日一题 2024_11_11 切棍子的最小成本(区间 DP,记忆化搜索)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:切棍子的最小成本

双十一光棍节力扣给我们准备了 . . . 一根棍子

代码与解题思路

先读题:

题目给了 n 代表棍子的长度,给了 cuts 数组代表我们需要在这几个地方砍这根棍子,每次砍的时候会累加当前棍子长度的成本,让我们找出成本最小的砍法

有没有数学的解法我不太清楚,但最简单的思路就是,枚举切割这根棍子的所有情况,找出成本的最小值,那该如何枚举呢?

dfs(i, j),i j 作为当前木棍的左右边界,我们枚举 k 作为切割的位置,切割后木棍的成本就是:dfs(i, k)+dfs(k, j),而当前木棍的成本是:cuts[j]-cuts[i],具体代码如下:

func minCost(n int, cuts []int) int {cuts = append(cuts, 0, n) // 增加头和尾slices.Sort(cuts) // 排序方便操作n = len(cuts) // 现在的 n 是 cuts 数组的长度memo := make([][]int, n)for i := range memo {memo[i] = make([]int, n)}var dfs func(int, int) intdfs = func(i, j int) int { // i j 作为 cuts 数组的下标if i+1 == j { // 中间没有可以切割的点了,不用切割了return 0 }p := &memo[i][j] // 记忆化if *p != 0 {return *p}res := math.MaxIntfor k := i+1; k < j; k++ { // 枚举切割的位置// dfs(i, k)+dfs(k, j) 切割后的两段木棍的成本和res = min(res, dfs(i, k)+dfs(k, j))}*p = res + cuts[j]-cuts[i] // 切割后两段木棍的成本+当前的成本return *p}return dfs(0, n-1)
}

想这样区间相关的动态规划问题应该是区间 DP,这也是我第一次做区间 DP 相关的题目呢~

最近力扣 DP 也是越来越多了

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.mrgr.cn/news/70286.html

相关文章:

  • Collections.synchronizedList()你真的会用吗?
  • 世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系
  • 【 ElementUI 组件Steps 步骤条使用新手详细教程】
  • Javaweb—Ajax与jQuery请求
  • 【极限编程(XP)】
  • linux GPIO
  • 堆排序,学习笔记
  • EHOME视频平台EasyCVR宇视设备视频平台1000路监控ip地址如何规划?
  • 期权懂|国内期货期权交易有门槛吗?
  • mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因
  • Ubuntu 的 ROS2 操作系统turtlebot3环境搭建
  • 内网环境,基于k8s docer 自动发包
  • 【c++笔试强训】(第三篇)
  • .wslconfig:6 中的未知密钥 ‘boot.systemd‘ 问题解决
  • 机器学习——特征工程、正则化、强化学习
  • Python绘制爱心
  • 简易入手《SOM神经网络》的本质与原理
  • 企业网络转型:优势与挑战
  • 劳务争议调解平台(源码+文档+部署+讲解)
  • 使用Python的vn.py进行量化回测双均线策略
  • c文件的编译,汇编,基础知识
  • vlan故障排错
  • MySQL如何利用索引优化ORDER BY排序语句
  • python中常见的8种数据结构之一矩阵及其使用方法
  • 米思齐编程:开启创意与学习的大门
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(二)-三个信号