力扣每日一题 -- 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.mfbz.cn/a/133048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图论11-欧拉回路与欧拉路径+Hierholzer算法实现

文章目录 1 欧拉回路的概念2 欧拉回路的算法实现3 Hierholzer算法详解4 Hierholzer算法实现4.1 修改Graph&#xff0c;增加API4.2 Graph.java4.3 联通分量类4.4 欧拉回路类 1 欧拉回路的概念 2 欧拉回路的算法实现 private boolean hasEulerLoop(){CC cc new CC(G);if(cc.cou…

【Spring】c命名和p命名空间注入

p命名空间注入 导入p名称空间 xmlns:p"http://www.springframework.org/schema/p"直接输入p就会有相关的属性弹出 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xml…

免费博客搭建笔记

title: 免费博客搭建笔记 tags: 博客搭建 本次是对自己在网上学习github搭建一个 &#x1f447;个人免费静态网站的总结当然不是很完美&#x1f447; Bow to the new king iYANG (yangsongl1n.github.io) 接着我会从我的写笔记的个人习惯来逐步介绍如何搭建这个网站 1.写笔…

函数的连续性

函数在某一点极限存在&#xff0c;不一定连续 函数的左极限 函数的右极限 函数在某点连续需要满足三个条件 1、左右极限存在 2、左右极限相等 3、函数在该点的极限值等于在该点的函数值 满足1、2两个条件函数在该点极限存在。

计算机网络期末复习-Part4

1、UDP和TCP的比较 TCP提供可靠传输&#xff1b;UDP提供不可靠传输。TCP有连接&#xff1b;UDP无连接&#xff08;减小时延&#xff09;。TCP提供流量控制&#xff1b;UDP不提供流量控制。TCP提供拥塞控制&#xff1b;UDP不提供拥塞控制&#xff08;传输快&#xff09;。TCP提…

【蓝桥杯软件赛 零基础备赛20周】第3周——填空题

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 文章目录 00. 2023年第14届参赛数据0. 上一周答疑1. 填空…

Practice01-Qt6.0设置文本颜色、格式等。

Qt6.0学习&#xff0c;在此做个记录&#xff0c;方便日后查找复习 本次项目用到的控件有&#xff1a;复选框&#xff0c;单选按钮。文本编辑框。 项目目录结构&#xff1a; 项目运行效果图&#xff1a; 实现的功能&#xff1a; 勾选Underline、Italic&#xff0c;Bold时&…

Git 进阶使用

一. Git图形化操作 1.1.什么是图形化管理工具 图形化管理工具是一种通过可视化界面来操作计算机系统或应用程序的软件工具。在软件开发中&#xff0c;它通常用于管理和操作版本控制系统&#xff08;如Git、SVN等&#xff09;以及代码开发环境&#xff08;如IDE&#xff09;。与…

Ruoyi框架开发项目(宝藏干货)

若依勾选框导出数据 效果图&#xff1a; package com.ruoyi.web.controller.school;import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.pag…

木板上的蚂蚁(c++题解)

题目描述 有一块木板&#xff0c;长度为 n 个 单位 。一些蚂蚁在木板上移动&#xff0c;每只蚂蚁都以 每秒一个单位 的速度移动。其中&#xff0c;一部分蚂蚁向 左 移动&#xff0c;其他蚂蚁向 右 移动。 当两只向 不同 方向移动的蚂蚁在某个点相遇时&#xff0c;它们会同时改…

【数据结构】深度剖析ArrayList

目录 ArrayLIst介绍 ArrayList实现的接口有哪些&#xff1f; ArrayList的序列化&#xff1a;实现Serializable接口 serialVersionUID 有什么用? 为什么一定要实现Serialzable才能被序列化&#xff1f; transient关键字 为什么ArrayList中的elementData会被transient修…

酷柚易汛ERP - 计量单位操作指南

1、应用场景 计量单位支持单单位和多单位管理&#xff0c;单位是开单时确定商品价格的主要计量维度。 2、主要操作 2.1 新增多单位 打开【资料】-【计量单位】点击新增 录入基本单位和副单位 ① 基本单位&#xff1a;最小单位 ② 副单位&#xff1a;多单位里的大单位 ③ …

【神经网络】GAN:生成对抗网络

GAN&#xff1a;生成对抗网络 Generator&#xff08;生成器&#xff09;概念 和传统的神经网络不同&#xff0c;Generator除了接受x的输入之外&#xff0c;还会接受一个简单的分布作为z进行输入&#xff0c;从而使得网络的输出也是一个复杂的分布 为什么输出需要时一个分布呢…

【华为HCIP | 华为数通工程师】IPV4与IPV6 高频题(1)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

jQuery实现二级菜单

jQuery怎么实现二级菜单呢&#xff1f;让我为大家演示一个例子&#xff01; 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: …

耗时3年写了一本数据结构与算法pdf!开源了

前言 大家好&#xff0c;我是bigsai&#xff0c;很早就在写博客&#xff0c;我将csdn的文章整理成了一个pdf&#xff0c;并且开源到github上&#xff01; 自己写东西断断续续也不少时间了&#xff0c;也写了不少东西(虽然是偏向小白)&#xff0c;这个其实花费的时间还是比较多…

ENVI IDL:如何解析XML文件(以Landsat9-MTL.xml文件为例)

01 前言 我们原本是打算对Landsat9文件进行辐射定标&#xff0c;但是辐射定标的参数在MTL文件中&#xff0c;从文件中查看参数直接复制到IDL中固然可行&#xff0c;但是当我们对Landsat9文件进行批量辐射定标时&#xff0c;这种方法就将失效了。因此我们需要自动从MTL文件中读…

一个轻量级 Java 权限认证框架——Sa-Token

一、框架介绍 Sa-Token 是一个轻量级 Java 权限认证框架&#xff0c;主要解决&#xff1a;登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 官网文档: https://sa-token.cc/doc.html 二、Spring Boot 集成Sa-Token 2.1、…

keil仿真错误:*** error 65: access violation at 0x40021000 : no ‘write‘ permission

按下图打开&#xff1a; 进行修改&#xff1a; 我用的芯片是:STM32F103C8T6 开始仿真&#xff1a; 成功解决不能仿真问题

mongodb导出聚合查询的数据

❗️❗️❗️在正文之前先要讲一个坑&#xff0c;就是mongoexport这个命令工具不支持导出聚合查询的数据&#xff0c;比如通过某某字段来分组 我查了一天关于mongoexport怎么来导出聚合查询的结果集&#xff0c;最终还是gpt给了我答案 &#x1f62d; 既然mongoexport不支持&…