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

news2025/1/16 7:44:42

 

        //当我们将棍子分段之后,我们是不是想到了怎么组合这些棍子

        //并且这些棍子有一个性质就是只能与相邻的进行组合

        //暴力搜索的话复杂度很高

        //在思考暴力搜索的时候,我们发现一个规律

        //比如棍子长度1 2 1 1 2

        //那么与最后一个2组合的棍子有,1 2,1 1 2,2 1 1 2,1 2 1 1 2

        //与最后一个1组合的棍子有,1 1,2 1 1,1 2 1 1

        //发现一个很显然的规律,能与前面组合的只有前面已经组合过的才能组合在一起

        //这是左边,那么当然还有右边

        //同理也是

        //然后根据规律总结一下公式

        //假设1 2 1 1 2,下标对应0 1 2 3 4

        //设f[i][j],表示组成这个区间的棍子的成本

        //那么想组成f[0][4] = f[0][3] + a[4];

        //f[1][4] = f[1][3] + a[4];

        //f[2][4] = f[2][3] + a[4];

        //f[3][4] = f[3][3] + a[4];

        //从这里又能看出我们组合肯定是根据范围从小到大进行组合的

        //比如f[1][3] = f[1][2] + f[2][3];那么在统计范围大的区间时

        //是由前面一个小范围推过来的,所以故此在计算大范围之前先统计小范围

        //故这就是动态规划的阶段

        //本题中我们求的是最小成本,那么需要把所有能组成f[0][4]的最小成本在推导时取个min就可以了

class Solution {
public:
    int minCost(int n, vector<int>& cuts) 
    {
        sort(cuts.begin(),cuts.end());
        vector<int> a;
        int prev = 0;
        for(int i = 0;i < cuts.size();i++)
        {
            a.push_back(cuts[i] - prev);
            prev = cuts[i];
        }
        a.push_back(n - prev);
        
        //当我们将棍子分段之后,我们是不是想到了怎么组合这些棍子
        //并且这些棍子有一个性质就是只能与相邻的进行组合
        //暴力搜索的话复杂度很高
        //在思考暴力搜索的时候,我们发现一个规律
        //比如棍子长度1 2 1 1 2
        //那么与最后一个2组合的棍子有,1 2,1 1 2,2 1 1 2,1 2 1 1 2
        //与最后一个1组合的棍子有,1 1,2 1 1,1 2 1 1
        //发现一个很显然的规律,能与前面组合的只有前面已经组合过的才能组合在一起
        //这是左边,那么当然还有右边
        //同理也是
        //然后根据规律总结一下公式
        //假设1 2 1 1 2,下标对应0 1 2 3 4
        //设f[i][j],表示组成这个区间的棍子的成本
        //那么想组成f[0][4] = f[0][3] + a[4];
        //f[1][4] = f[1][3] + a[4];
        //f[2][4] = f[2][3] + a[4];
        //f[3][4] = f[3][3] + a[4];
        //从这里又能看出我们组合肯定是根据范围从小到大进行组合的
        //比如f[1][3] = f[1][2] + f[2][3];那么在统计范围大的区间时
        //是由前面一个小范围推过来的,所以故此在计算大范围之前先统计小范围
        //故这就是动态规划的阶段
        //本题中我们求的是最小成本,那么需要把所有能组成f[0][4]的最小成本在推导时取个min就可以了
        

        //1 2 1 1 2
        int f[110][110];
        memset(f,0x3f3f3f3f,sizeof(f));
        vector<int> b(a.size() + 1);
        for(int i = 0;i < a.size();i++) b[i + 1] = a[i];
        for(int i = 1;i <= a.size();i++) f[i][i] = 0;

        int s[110];
        memset(s,0,sizeof(s));
        for(int i = 1;i <= a.size();i++) s[i] = s[i - 1] + b[i]; 

        for(int len = 2;len <= a.size();len++)//枚举的范围和阶段
        {
           for(int l = 1;l + len - 1<= a.size();l++)//确定范围,把当前阶段的状态都枚举出来
           {
                int r = l + len - 1;
                for(int k = l;k < r;k++)//确定好范围之后,我们就可以更新当前范围的状态了
                //怎么样保证不漏掉呢,只要枚举l <= k < r之间的k就行,可以保证所有状态都有
                { 
                  f[l][r] = min(f[l][r],f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
                }
           }
        }
        return f[1][a.size()];
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3+ElementUIPlus颜色选择器,Ruoyi框架动态替换图片

需求为&#xff0c;需要动态的替换头部和底部图片的颜色&#xff0c;通过固定的颜色 要实现可以动态的通过颜色&#xff0c;去替换的效果。 一、通过将选择的颜色&#xff0c;通过Vuex来进行一个存储&#xff0c;用户后续的使用 <el-form-item label"顶部底部背景&quo…

LabVIEW滚动轴承故障在线监测

展示了如何将LabVIEW开发出一种有效的滚动轴承故障在线监测系统。介绍了该系统的开发过程、工作原理及其在实际应用中的效果。该系统成功地应用于对滚动轴承故障的早期诊断&#xff0c;提高了故障检测的准确性和效率。 滚动轴承在工作过程中会产生复杂的振动信号&#xff0c;包…

19. JDK8以后的时间类(Date类、日期格式化类、日历类、工具类)

JDK8以后的时间类 Date类1. ZoneID类1.1 方法1.2 代码示例 2. Instant类2.1 方法2.2 代码示例 3. ZoneDateTime类3.1 方法3.2 代码示例 日期格式化类1. DateTimeFormatter类1.1 方法1.2 代码示例 日历类1. LocalDate类1.1 方法1.2 代码示例 2. LocalTime类2.1 方法2.2 代码示例…

Java设计模式详解-更新中

收藏和关注的同时&#xff0c;请也关注 公众号 “IT技术馆” 各位大家好&#xff0c;从今天开始&#xff0c;作者开始整理 《JAVA软件设计模式&#xff08;GOF&#xff09;》 专栏。请各位多多关注&#xff01; 该专栏是根据作者的技术经验和设计模式的了解&#xff0c;进行详…

ospf综合实验配置

实验规则如上&#xff1a; 划分ip地址&#xff1a;七个骨干&#xff0c;五个环回 首先划分两个ip&#xff0c;一个给骨干&#xff0c;一个给环回 192.168.1.0/24 -- 1.划分七个骨干网络- 2.划分5个环回网络- 192.168.1.0/25--骨干-----192.168.1.0/28 192.168.1.0 000 0…

numpy中数组的操作

目录 一&#xff1a;数组的属性 二&#xff1a;翻转数组 三&#xff1a;数组的计算 一&#xff1a;数组的属性 NumPy 数组&#xff08;通常称为 ndarray&#xff09;有许多有用的属性&#xff0c;这些属性可以帮助你了解数组的各个方面。以下是一些主要的属性&#xff1a; …

java idea 中的 Scratches and Consoles

IDEA 中&#xff0c;"Scratches and Consoles" 是一个用于临时代码编辑和交互式开发的工具窗口&#xff0c;作用如下&#xff1a;Scratches&#xff08;草稿&#xff09;&#xff1a;Scratches 是一个用于临时编写和运行代码片段的工具&#xff0c;你可以在其中创建临…

如何创建vite项目!

vite 官网&#xff1a;vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验 网络&#xff1a;vite是一个静态服务器&#xff0c;也可以说是一个开发的构建工具 它的目标就是提供快速的开发体验和性能优化 vite优点与缺点 Vite 优点Vite 缺点开发服务器比 Webp…

一文掌握SpringBoot注解之@Cacheable 知识文集(1)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

echarts-wordcloud词云

echarts-wordcloud是基于echarts的一个插件&#xff0c;所以我们要首先安装echarts包&#xff0c;然后再安装echarts-wordcloud的包&#xff0c;这里我的练习项目安装的版本&#xff1b;当然&#xff0c;你可以随意安装你需要的版本&#xff1b; “echarts”: “^5.3.3”, “ec…

一文搞懂SECS/GEM(二)

继《一文搞懂SECS/GEM&#xff08;一&#xff09;》继续补充 这里写目录标题 HSMS2种连接模式&#xff08;Connect Mode&#xff09;6类消息消息交换过程Select ProcedureData ProcedureDeselect ProcedureLinktest ProcedureSeparate ProcedureReject Procedure 4种状态状态转…

【系统调用IO】open、close、read、write、lseek

目录 3 系统调用IO3.1 文件描述符3.1.1 FILE结构体3.2.2 文件描述符 3.3 open、close、read、write、lseek3.3.1 文件权限3.3.2 open3.3.3 close3.3.4 read3.3.5 write3.3.6 lseek3.3.7 代码示例 文件io和标准io的区别 橙色 3 系统调用IO 3.1 文件描述符 3.1.1 FILE结构体 …

Python 自动化测试:数据驱动

软件质量。这种测试&#xff0c;在功能测试中非常耗费人力物力&#xff0c;但是在自动化中&#xff0c;却比较好实现&#xff0c;只要实现了测试操作步骤&#xff0c;然后将多组测试数据以数据驱动的形式注入&#xff0c;就可以实现了。 前面文章学习了参数化&#xff0c;当数…

5G_射频测试_基础概念(二)

定义了测试参考点&#xff0c;不同的RRU类型 C类型传统RRU Conducted and radiated requirement reference points 4.3.1 BS type 1-C&#xff08;传统RRU一般测试点就是连接天线的射频接头&#xff09; 4.3.2 BS type 1-H&#xff08;宏站MassiveMIMO 矩阵天线&#xff…

自然语言处理研究的内容

一.基础技术 1.1 词法分析 词法分析&#xff08;Lexical Analysis&#xff09;&#xff0c;也称为词法扫描或扫描器&#xff0c;是自然语言处理&#xff08;NLP&#xff09;中的基础步骤之一&#xff0c;用于将输入的文本分割成词法单元&#xff08;Token&#xff09;。词法单…

每天都美好的一天

每天我们都会遇到不同的事情&#xff0c;开心的、愤怒的、悲伤的等等&#xff0c;今天过完明天我们还得继续&#xff0c;所以一切又显得不那么重要。一天中如果有不开心的事情发生会影响我们当天很长一段时间&#xff0c;甚至未来几天。 今天所做之事都是自己明天的基础&#…

JDK环境变量配置成功,命令提示符(CMD)中,输入java、javac、java -version等没有反应

双击环境变量里的path&#xff0c;然后把画圈的那两行移到最上边即可解决问题。 但是这样的话&#xff0c;当年再次双击path时就会呈现如下界面&#xff0c; 看起来很不方便&#xff0c;原来若Path变量值是%开头的&#xff0c;它就会显示一个字符串&#xff08;相当于每一行之…

机试指南:Ch1:绪论 Ch2:枚举和模拟

文章目录 第1章 绪论(1)如何准备机试(2)OJ和开发环境简介(3)OJ的原理、OJ的几种情况(4)学习建议(5)23版内容(6)常犯的编程小错误(7)其他小问题一览①int取值范围②return 0 缺省问题③万能头文件 #include <bits/stdc.h>④scanf、printf 比 cin、cout 更节约时间⑤不确定…

[java基础揉碎]算术运算符

算数运算符一览: *如果减号运算符加在变量前面, 这个变量会直接变成负数(加号不会): *取模(取余)11%9为什么等于2, 怎么计算的: 如果取模设计负数怎么运算的: 公式 a % b a - a / b * b *除法在java中会根据类型的不同而不同: 10/4是整数除以整数, 本来数学中应该得到2.5, …

热血江湖服务端服务器架设教程

热血江湖服务端服务器架设教程 大家好&#xff0c;我是艾西今天简单的说下热血江湖架设需要哪些东西然后怎么操作&#xff0c;不管你是自己玩还是对外开放&#xff0c;这对于有兴趣的小伙伴总的都是一件好事。技多不压身就是这么个道理&#xff0c;当你需要用上时还希望能记起…