LeetCode 1547. 切棍子的最小成本

LeetCode 1547. 切棍子的最小成本 Java版本 1547. 切棍子的最小成本 难度困难 有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。例如,长度为 6 的棍子可以标记如下: 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。 你可以按顺序完成切割,也可以根据需要更改切割的顺序。 每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。 返回切棍子的 最小总 阅读详情

题目链接:LeetCode 1547. 切棍子的最小成本

题意:

   有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。例如,长度为 6 的棍子可以标记如下:

给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。

你可以按顺序完成切割,也可以根据需要更改切割的顺序。

每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。

返回切棍子的 最小总成本 。

 

解题思路:

    区间DP,根据代码理解

class Solution {

    /**
     * @param Integer $n
     * @param Integer[] $cuts
     * @return Integer
     */
    function minCost($n, $cuts) {
    	$dp = array();         // 二维数组   dp[i][j] 表示将第i段到第j段完全切开的最小代价
    	array_push($cuts, 0);  // 将0和n插入数组中
    	array_push($cuts, $n);
        sort($cuts);  // 排序
    	$m = count($cuts)-1;
    	for($i = 1; $i <= $m; $i++) {
    		for($j = 1; $j <= $m; $j++) {
    			$dp[$i][$j] = -1; // 初始化
    		}
    	}
    	for($i = 1; $i <= $m; $i++) {
    		$dp[$i][$i] = 0;  // 自身到自身为0
    	}
    	for($len = 1; $len < $n; $len++) {       // 当前区间长度,从1开始是因为0已经设置过了
    		for($left = 1; $left <= $m; $left++) {  // 从所有情况开始
    			$right = $left + $len;
    			if($right > $m) {
    				break;
    			}
    			for($mid = $left; $mid < $right; $mid++) {
    				 if($dp[$left][$mid] == -1 || $dp[$mid+1][$right] == -1) {
    				 	continue;
    				 }
    				$v = $dp[$left][$mid] + $dp[$mid+1][$right] + $cuts[$right] - $cuts[$left-1];
 // cuts[right]-cuts[left-1] 为当前木根的长度
 // $dp[$left][$mid] + $dp[$mid+1][$right]  接下来切左段和右段的长度
    				if($dp[$left][$right] == -1 || $dp[$left][$right] > $v) {
    					$dp[$left][$right] = $v;
    				}
    			}
    		}
    	}
    	return $dp[1][$m];
    }
}
求最小费用或最短路径(最小生成树) 求最小费用或最短路径(最小生成树) 网络建设问题,旅行路径问题等等 立即下载

相关推荐

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1116

2023-03-28:有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置, 你可以按顺序完成切割,也可

r+1] 两段木棍切割成最小块的总成本,并加上当前区间的长度(即 arr[r+1]-arr[l-1]),得到该切割点下的总成本。2.初始化一个 m+2 行 m+2 列的 DP 数组 dp,dp[i][j] 表示将区间 [i,j] 内的木棍切割成最小块的总成本。在递归函数中,共有 n 个区间需要计算最小成本,对于每个区间,枚举所有可能的切割点需要 O(n) 的时间复杂度,因此总时间复杂度为 O(n^3)。每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。返回切棍子的最小总成本。

福大大架构师每日一题 1万+

ECB oracle——attack

基于ECB oracle的攻击方案前言什么是ECB方案步骤1.确定块大小和明文大小2.暴力破解求明文脚本代码 前言 参考文章:Breaking ECB by prepending your own message. 环境地址:ECB oracle 什么是ECB 分组密码中AES的一种模式(其他还有:CBC、ECB、CTR、OCF、CFB)如图每一块加密是分开的。 方案步骤 1.确定块大小和明文大小 先用一个字符"a"去encrypt返回32个字节的数据(64位16进制)依次用"aa",“aaa”…去en

weixin_44617902的博客 1311

蓝桥杯省赛冲刺-坐标动态规划学习

在硬币没有数量限制情况下,小明去新华书店买一本27元的算法宝典;小明当前有三种硬币,分别为2元、5元、7元;请问小明最少使用几枚硬币能买到这本书。

weixin_64490645的博客 240

DolphinScheduler+DataX实战:5分钟搞定MySQL到Hive数据同步(附完整JSON配置)

本文详细介绍了如何利用DolphinScheduler与DataX构建企业级数据同步流水线,实现MySQL到Hive的高效数据同步。文章提供了从环境部署、核心组件配置到完整JSON配置的实战指南,并深入探讨了性能调优、增量同步策略以及生产环境下的监控与错误处理,帮助读者快速搭建稳定可靠的数据同步方案。

5b6n7m8的博客 253

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

力扣第201场周赛

整理字符串 题意: 给你一个由大小写英文字母组成的字符串 s 。 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i + 1] 不会同时满足下述条件: 0 <= i <= s.length - 2 s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。 请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。 请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。 注意:空字符串也属于整理好的

pingfanblog 372

Kubeflow系统性学习教程:从入门到高级实践

Kubeflow学习教程摘要(150字): Kubeflow是基于Kubernetes的云原生MLOps平台,提供端到端机器学习解决方案。核心功能包括Jupyter Notebooks开发环境、Pipelines工作流编排、分布式训练支持和模型服务部署。教程采用三阶段学习路径:初学者搭建Kind集群体验Notebooks;中级开发自定义Pipeline组件;高级实现企业级应用。通过容器化和K8s CRD深度集成,解决环境一致性、实验跟踪和资源调度等MLOps痛点,相比MLflow/Airflow更适合大规模

自可乐的博客 886

leetcode动态规划切钢筋

钢筋的价值和长度有关,以下为初始数据 v[0] = 0; v[1] = 1; v[2] = 5; v[3] = 8; v[4] = 9;//不是最大值,注意 v[5] = 10; v[6] = 20; v[7] = 20; v[8] = 20; v[9] = 20; v[10] = 20; 思路 动态规划,只管最后一刀切的位置 需要将n之前的长度的价值最大值求取出来,进行累计 #include<stdio.h

weixin_41672404的博客 339

UG二次开发GRIP创建drill工序

UG二次开发GRIP创建drill工序

qq285503851的博客 1696

电子电气架构 --- 整车电源管理

保证启动能力:防止因电池电量耗尽而导致的车辆无法启动,这对于确保车辆在任何时候都能可靠运行至关重要。 延长电池寿命:通过避免电池深度放电,有助于延长其使用寿命,减少更换电池的需求和成本。 提升用户体验:虽然负载被关闭可能会暂时影响舒适度,但通过在必要时自动采取行动,可以减少驾驶员的焦虑和不确定性,提高整体的用户满意度。

Soly_kun的博客 1084

LeetCode 刷题 火柴拼正方形

leetcode刷题 473题火柴拼正方形 用到了记忆化搜索与dp

weixin_46091531的博客 386

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LeetCode每日一题1547---切棍子的最小成本

第二次切割长度为 6 的棍子(即第一次切割得到的第二根棍子),第三次切割为长度 4 的棍子,最后切割长度为 3 的棍子。每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。在具体实现时,由于需要先计算子段的值,也就意味着需要优先计算下标跨度较小的f,于是可以先从小到大枚举下标跨度l,然后枚举左边界i,通过i + l - 1计算出右边界j。总成本 <= 25 的切割顺序很多,例如,[4, 6, 5, 2, 1] 的总成本 = 22,是所有可能方案中成本最小的。经典的动态规划问题。

niulinbiao的博客 666

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

力扣:1547. 切棍子的最小成本

之后开始切割木棍,对于任意一个切割区间 [ l,r ],(l,r为切割的2个断点在数组中的下标),要选在其中寻找哪个点进行切割,于是就要遍历区间,如果当前的切割点为 i,那么在 i 处切割后,切割区间 [ l,r ]就出现了2个子区间切割区间 [ l,i-1 ]和切割区间 [ i+1,r ],这时就需要递归访问2个子区间,在子区间上再求最小成本。第二次切割长度为 6 的棍子(即第一次切割得到的第二根棍子),第三次切割为长度 4 的棍子,最后切割长度为 3 的棍子。如果按给定的顺序切割,则总成本为 25。

xyk050216的博客 385

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 1547:切棍子的最小成本

文章目录题目示例示例1示例2代码 题目 有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。例如,长度为 6 的棍子可以标记如下: 给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。 你可以按顺序完成切割,也可以根据需要更改切割的顺序。 每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。 返回切棍子的 最小

wyplj2015的博客 813

(nice!!!)(LeetCode) 1547. 切棍子的最小成本(动态规划,递归 || 递推)

【代码】(nice!!!)(LeetCode) 1547. 切棍子的最小成本(动态规划,递归 || 递推)

记录一些刷过的题并分享学习心得 761

【Leetcode 每日一题】1547. 切棍子的最小成本

Leetcode 每日一题 - 1547. 切棍子的最小成本

冠位优化 870

Leetcode1547:切棍子的最小成本

要求将这些切割点排序后,通过若干次切割将木棒分成若干段,每次切割的成本等于切割位置两侧木棒长度的较大值(这里简化为直接计算切割后每段木棒的长度之和,因为每次切割的成本与切割位置两侧木棒长度的较大值相关,但在这个问题中,我们直接累加每段木棒的长度作为总成本的一个简化处理)。目标是找到一种切割方案,使得所有切割的总成本最小。每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。

m0_67598823的博客 825

leetcode1547.切棍子的最小成本

区间dp问题,思路源自。

weixin_74175349的博客 184

力扣每日一题1547:切棍子的最小成本

有一根长度为n个单位的木棍,棍上从0到n标记了若干位置。例如,长度为的棍子可以标记如下:给你一个整数数组cuts,其中cuts[i]表示你需要将棍子切开的位置。你可以按顺序完成切割,也可以根据需要更改切割的顺序。每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。请参阅第一个示例以获得更直观的解释。返回切棍子的。

C_Java_python12的博客 370

Leetcode刷题Python之1547.切棍子的最小成本

时间复杂度:填充 dp 表格需要三重循环,时间复杂度为 O(m3),其中 m 是 cuts 数组的长度。空间复杂度:dp 表的空间复杂度为 O(m2这道题是经典的动态规划问题,通过划分子问题并构建状态转移方程,可以有效地求解最小切割成本。

qq_53086905的博客 998

leetcode 1547. 切棍子的最小成本

如果第一刀的位置为 cuts[k],其中 k∈[i,j],那么我们会将待切割的木棍分成两部分,左侧部分的木棍为 cuts[i−1..k],对应的可以继续切割的位置为 cuts[i..k−1];右侧部分的木棍为 cuts[k..j+1],对应的可以继续切割的位置为cuts[k+1..j]。每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。③用f[i][j]表示在当前待切割的木棍的左端点为 cuts[i−1],右端点为 cuts[j+1] 时,将木棍全部切开的最小总成本。

qq_74457176的博客 234

leetcode 困难题 1547. 切棍子的最小成本-耗时96 Minimum Cost to Cut a Stick

Problem:两种方案的,第一种记忆化深度优先搜索,第二种动态规划需要处理数组cuts,加上0和n方案1: 动态规划的,dp[i][j]表示cuts[i]到cuts[j]的最小成本,返回dp[1][nn]递推公式是:从小到大求出长度分别是2, 3, 4, …, nn-1的dp数组,也就是先求出dp[1][3], dp[2][4], dp[3][5],然后求出dp[1][4], dp[2][5],…,最后求出dp[1][nn]最小长度是2,[1, 2, 3]此时2可以做分割点。

邹九的个人博客 771

力扣每日一题 1547. 切棍子的最小成本

每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。dfs的方法就是以整段为递归入口,枚举每个可切割点尝试切割,递归求解。至于我的贪心思想,就是参考哈夫曼树,每次选择花费最小的两块合并,其实就是切分的逆过程。这个题目的正解应该是动态规划,区间dp。但这个题的数据范围太水了,直接dfs递归暴力求解就可以过,完全够不上困难。因为记忆化了,所以时间复杂度应该是O(m^3),m是cuts的长度。

qq_41529799的博客 378
上一篇: LeetCode 1558. 得到目标数组的最少函数调用次数
下一篇: LeetCode 1563. 石子游戏 V
error0318
博客等级 码龄9年 57粉丝 515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值