力扣每日一题 -- 2919. 使数组变美的最小增量运算数

       //这题本质还是一个背包问题
        //怎么去思考这个问题呢
        //我最开始的思想是根据经验来看,最小增量运算数,并且使数组变美丽,那么就有点像编辑距离的问题
        //但是我看了下时间复杂度,不能是n^2,那么再去仔细思考一下,看到该数组是美丽的,并且美丽的代价是
        //长度大于等于3的连续任意子数组是美丽的就是正确的,我们从长度大于等于3这里桌上
        //一定要知道长度大于等于3,这个是这题的关键解决点
        //那么根据动态规划的思想,先去从前往后推导
        
        //惊奇的发现这道题有点像背包问题dp和状态机dp

        //那么我们可以状态定义一下试一下
        //f[i][0]表示从前i个物品当中选出物品,并且第i个物品没有选且是美丽的
        //f[i][1]表示从前i个物品当中选出物品,并且第i个物品没有选且是美丽的

        //假设当前是第i个
        //那么能转移到第i个的可以由那几个状态转移并推导到当前第i位时的状态
        //第i - 3个,i - 2个,i - 1个可以推导过来
        //1.如果是第i - 3推导过来的话(并且是选了第 i- 3这个物品)
        //  那么当前第i位一定要选,如果不选的话,就不能成为美丽数组
        //  如果第i - 3位没选的话,那么不能从i - 3位转移到第i位
        //那么第i - 3个转到第i个的状态转移方程就是
        //f[i][1] = max(0,k - a[i]) + f[i - 3][1]  //最开始错了一次,我是都初始化成了0x3f3f3f3f,但是这样会导致状态转移很麻烦,因为这样还得判断
        //是否前面的状态是0x3f3f3f3f,索性我就让他转变成0就行(如果该点大于的话)
        
        //2.如果是第i - 2个转移到第i个的话
        //  那么第i个可以分为选或不选
        //  第i个选的话,那么可以从第i - 2个不选和第i - 2个选表示出来
        //  f[i][1] = f[i - 2][1] + max(0,k - a[i]);
        //  f[i][0] = f[i - 2][1];

        //第i - 1个同理
 

 


class Solution {
public:long long minIncrementOperations(vector<int>& nums, int k) {vector<vector<long long>> f(nums.size(),vector<long long>(2,0));//这题本质还是一个背包问题//怎么去思考这个问题呢//我最开始的思想是根据经验来看,最小增量运算数,并且使数组变美丽,那么就有点像编辑距离的问题//但是我看了下时间复杂度,不能是n^2,那么再去仔细思考一下,看到该数组是美丽的,并且美丽的代价是//长度大于等于3的连续任意子数组是美丽的就是正确的,我们从长度大于等于3这里桌上//一定要知道长度大于等于3,这个是这题的关键解决点//那么根据动态规划的思想,先去从前往后推导//惊奇的发现这道题有点像背包问题dp和状态机dp//那么我们可以状态定义一下试一下//f[i][0]表示从前i个物品当中选出物品,并且第i个物品没有选且是美丽的//f[i][1]表示从前i个物品当中选出物品,并且第i个物品没有选且是美丽的//假设当前是第i个//那么能转移到第i个的可以由那几个状态转移并推导到当前第i位时的状态//第i - 3个,i - 2个,i - 1个可以推导过来//1.如果是第i - 3推导过来的话(并且是选了第 i- 3这个物品)//  那么当前第i位一定要选,如果不选的话,就不能成为美丽数组//  如果第i - 3位没选的话,那么不能从i - 3位转移到第i位//那么第i - 3个转到第i个的状态转移方程就是//f[i][1] = max(0,k - a[i]) + f[i - 3][1]  //最开始错了一次,我是都初始化成了0x3f3f3f3f,但是这样会导致状态转移很麻烦,因为这样还得判断//是否前面的状态是0x3f3f3f3f,索性我就让他转变成0就行(如果该点大于的话)//2.如果是第i - 2个转移到第i个的话//  那么第i个可以分为选或不选//  第i个选的话,那么可以从第i - 2个不选和第i - 2个选表示出来//  f[i][1] = f[i - 2][1] + max(0,k - a[i]);//  f[i][0] = f[i - 2][1];//第i - 1个同理for(int i = 0; i < nums.size();i++)if(nums[i] >= k)//初始化,避免加上已经大于等于k的值{f[i][0] = 0x3f3f3f3f;  }f[0][1] = max(0,k - nums[0]);//这个本质是这样的k > nums[0] ? k-nums[0] : 0;,但是我们这里提供一个比较简单的方法f[1][1] = max(0,k - nums[1]);f[2][1] = max(0,k - nums[2]);int n = nums.size();for(int i = 3; i < n; i++){f[i][1] = min(min(f[i-3][1],f[i-2][1]),f[i-1][1])+max(0,k-nums[i]);f[i][0] = min(f[i-2][1],f[i-1][1]);}long long ans = 1e14;for(int i = n - 3;i < n;i++){//ans = min(ans,min(f[i][1],f[i][0]));//答案不能这么写,因为我们是判断最后3位哪个选最大值//选了后面,就不用加了ans = min(ans,f[i][1]);}return ans;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Pyarmor保护你的Python脚本

目录 一、Pyarmor简介 二、使用Pyarmor保护Python脚本 1、安装Pyarmor 2、创建Pyarmor项目 3、添加Python脚本 4、配置执行环境 5、生成保护后的脚本 三、注意事项与未来发展 四、未来发展 五、总结 本文深入探讨了如何使用Pyarmor工具保护Python脚本。Pyarmor是一个…

OpenHarmony,奏响中国基础软件的“光辉岁月”

梦想需要多久的时间&#xff0c;多少血和泪&#xff0c;才能慢慢实现&#xff1f; 天地间任我展翅高飞&#xff0c;谁说那是天真的预言&#xff1f; 《光辉岁月》歌词中的这两个问题&#xff0c;恰好可以送给今天的中国基础软件事业。 曾几何时&#xff0c;我们认为中国基础软件…

前端框架Vue学习 ——(四)Axios

文章目录 Axios 介绍Axios 入门Vue项目中使用 Axios Axios 介绍 介绍: Axios 对原生的 Ajax 进行了封装&#xff0c;简化书写&#xff0c;快速开发。&#xff08;异步请求&#xff09; 官网: https://www.axios-http.cn/ 官网介绍&#xff1a;Axios 是一个基于 promise 网络请…

了解web3,什么是web3

Web3是指下一代互联网&#xff0c;它基于区块链技术&#xff0c;将各种在线活动更加安全、透明和去中心化。Web3是一个广义的概念&#xff0c;它包括了很多方面&#xff0c;如数字货币、去中心化应用、智能合约等等。听不懂且大多数人听到这个东西&#xff0c;直觉感觉就像骗子…

nacos配置中心docker部署、配置及 goLang 集成使用

为什么需要配置中心 平时我们写一个demo的时候&#xff0c;或者说一个单体的应用&#xff0c;都会有一个配置文件&#xff0c;不管是 json文件或者yaml文件&#xff0c;里面包含了redis,mysql,es等信息&#xff0c;如果我们修改了配置文件&#xff0c;往往我们需要重启&#x…

oracle-sql语句执行过程

客户端输入sql语句。 sql语句通过网络到达数据库实例。 服务器进程(server process)接收到sql语句。 sql – 解析成执行计划&#xff0c;然后sql才能执行。 会将sql和sql的执行计划缓存到共享池中。解析: 会消耗很多资源。 从数据库找数据&#xff0c;先从buffer cache中找&a…

npm install:sill idealTree buildDeps

执行npm install&#xff0c;卡在 sill idealTree buildDeps PS D:\workspace-groovy\attendance-india-web> npm install -g cnpm --registryhttps://registry.npm.taobao.org [..................] / idealTree:node_global: sill idealTree buildDeps[.................…

【日积月累】SpringBoot 通过注解@CacheConfig @Cacheable @CacheEvict @CachePut @Caching使用缓存

目录 1.前言2.引入依赖3.启动类加入注解EnableCaching4.常用注解4.1CacheConfig4.2Cacheable4.3CacheEvict4.4CachePut4.5Caching 5.总结6.参考 文章所属专区 日积月累 1.前言 Spring在3.1版本&#xff0c;就提供了一条基于注解的缓存策略&#xff0c;实际使用起来还是很丝滑…

经典矩阵试题(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、回型矩阵1、题目介绍2、思路讲解3、代码实现4、结果 二、蛇型矩阵1、题目介绍2、思路讲解…

华为取消6000万订单影响在扩大,高通嘴硬强调不受影响

高通公布了2023年第三季度的业绩&#xff0c;业绩显示营收下滑24%&#xff0c;净利润下滑36%&#xff0c;不过高通强调预计今年四季度业绩将回升&#xff0c;意思是说华为取消订单带来的影响较小。 一、高通处境不利已延续4年时间 2019年美国对华为采取措施&#xff0c;众多中国…

我在Vscode学OpenCV 图像运算(权重、逻辑运算、掩码、位分解、数字水印)

文章目录 权重 _ 要求两幅图像是相同大小的。[ 1 ] 以数据说话&#xff08; 1&#xff09; 最终&#xff1a;&#xff08; 2 &#xff09;gamma _输出图像的标量值 [ 2 ] 图像的展现力gamma并不等同于增加曝光度&#xff08; 1 &#xff09;gamma100&#xff08; 2 &#xff09…

HTML和CSS入门学习

目录 一.HTML 二.CSS 1.CSS作用&#xff1a;美化页面 2.CSS语法 【1】CSS语法规范 【2】如何插入样式表 3.CSS选择器 4.CSS设置样式属性--设置html各种标签的属性 【1】文本属性--设置整段文字的样式 【2】字体属性--设置单个字的样式 【3】链接属性--设置链接的样式…