leetcode2809. 使数组和小于等于 x 的最少时间 排序+0-1背包

  • https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/

  • 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒,对于所有下标 0 <= i < nums1.length ,nums1[i] 的值都增加 nums2[i] 。操作 完成后 ,你可以进行如下操作:

  • 选择任一满足 0 <= i < nums1.length 的下标 i ,并使 nums1[i] = 0 。
    同时给你一个整数 x

  • 请你返回使 nums1 中所有元素之和小于等于x 所需要的最少时间,如果无法实现,那么返回 -1 。

示例 1:输入:nums1 = [1,2,3], nums2 = [1,2,3], x = 4
输出:3
解释:
第 1 秒,我们对 i = 0 进行操作,得到 nums1 = [0,2+2,3+3] = [0,4,6] 。
第 2 秒,我们对 i = 1 进行操作,得到 nums1 = [0+1,0,6+3] = [1,0,9] 。
第 3 秒,我们对 i = 2 进行操作,得到 nums1 = [1+1,0+2,0] = [2,2,0] 。
现在 nums1 的和为 4 。不存在更少次数的操作,所以我们返回 3 。
示例 2:输入:nums1 = [1,2,3], nums2 = [3,3,3], x = 4
输出:-1
解释:不管如何操作,nums1 的和总是会超过 x 。提示:1 <= nums1.length <= 103
1 <= nums1[i] <= 103
0 <= nums2[i] <= 103
nums1.length == nums2.length
0 <= x <= 106

题解

  • 答案最大为n,因为当操作n+1次时,代表有一个位置操作了两次,则那个位置的第一次操作被浪费掉了。

  • 所以可以遍历1到n,即选i个元素,计算操作之后的最小值

  • 先选择增量值小的(即nums2中值较小的,第一个选择的位置对应的val,会后续增加(i-1)*val,所以先选择nums2中值较小的)

  • dp[i][j] 表示在前 i -1个元素中,清除(收集)j个获得的最大收益

初始化 f[0][0]=0。
考虑第i 个数「选或不选」:
不选:
f[i+1][j]=f[i][j]。
选:
f[i+1][j]=f[i][j−1]+nums1[i]+nums2[i]⋅j。
这两种情况取最大值,即
f[i+1][j]=max(f[i][j],f[i][j−1]+nums1[i]+nums2[i]⋅j)

code

class Solution {
public:int minimumTime(vector<int>& nums1, vector<int>& nums2, int x) {int n = nums1.size();typedef pair<int, int> my_pair;// 所有元素按 nums2[i] 从小到大排序,保证无后效性vector<my_pair> vec;for (int i = 0; i < n; i++) vec.push_back(my_pair(nums2[i], nums1[i]));sort(vec.begin(), vec.end());// 套用 0-1背包 dp 方程const long long INF = 1e18;long long dp[n + 1][n + 1];for (int i = 0; i <= n; i++) for (int j = 0; j <= n; j++) dp[i][j] = -INF;dp[0][0] = 0;for (int i = 1; i <= n; i++) for (int j = 0; j <= i; j++) {f[i][j] = f[i - 1][j];if (j > 0) dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + vec[i - 1].second +  j * vec[i - 1].first);}// 枚举所有操作可能的次数long long sm1 = 0, sm2 = 0;for (int x : nums1) sm1 += x;for (int x : nums2) sm2 += x;for (int i = 0; i <= n; i++) {long long t = sm1 + sm2 * i - dp[n][i];if (t <= x) return i;}return -1;}
};
  • 维度压缩
class Solution {
public:int minimumTime(vector<int>& nums1, vector<int>& nums2, int x) {int n = nums1.size();typedef pair<int, int> my_pair;// 所有元素按 nums2[i] 从小到大排序,保证无后效性vector<my_pair> vec;for (int i = 0; i < n; i++) vec.push_back(my_pair(nums2[i], nums1[i]));sort(vec.begin(), vec.end());// 套用 dp 方程const long long INF = 1e18;long long dp[n + 1];for (int i = 0; i <= n; i++) dp[i] = -INF;dp[0] = 0;for (int i = 1; i <= n; i++) for (int j = n; j > 0; j--) {dp[j] = max(dp[j], dp[j - 1] + vec[i - 1].second +  j * vec[i - 1].first);}// 枚举所有操作可能的次数long long sm1 = 0, sm2 = 0;for (int x : nums1) sm1 += x;for (int x : nums2) sm2 += x;for (int i = 0; i <= n; i++) {long long t = sm1 + sm2 * i - dp[i];if (t <= x) return i;}return -1;}
};

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

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

相关文章

DOM基础获取元素+事件基础+操作元素

一.DOM简介 DOM&#xff0c;全称“Document Object Model&#xff08;文档对象模型&#xff09;”&#xff0c;它是由W3C定义的一个标准。 在实际开发中&#xff0c;我们有时候需要实现鼠标移到某个元素上面时就改变颜色&#xff0c;或者动态添加元素或者删除元素等。其实这些效…

c++开发 高质量 面试题分享

1 编译和解释型语言分别有什么特点,各举例一种类型 编译型语言和解释型语言是两种不同的程序设计语言的类型,它们的主要区别在于程序的执行方式和效率。编译型语言是指将源代码通过编译器转换成机器码,然后直接在目标平台上运行的语言。解释型语言是指将源代码通过解释器逐…

AOP前置通知加return后的影响

总结1 前置通知before没有返回值&#xff0c;返回类型为void&#xff0c;即return&#xff1b;所以加不加return都可&#xff0c;无非是返回个空。因此不影响目标代码及其它通知执行。 总结2 前置通知报错的话&#xff0c;目标代码和后置通知不会执行&#xff0c;但是最终通…

Python爬虫(八)_Requests的使用

Requests&#xff1a;让HTTP服务人类 虽然Python的标准库中urllib2模块中已经包含了平常我们使用的大多数功能&#xff0c;但是它的API使用起来让人感觉不太好&#xff0c;而Requests自称"HTTP for Humans"&#xff0c;说明使用更简单方便。 Requests唯一的一个非转…

一周 AIGC 丨苹果下架多款 AIGC 应用,阿里云开源通义千问 70 亿参数模型

多个 AIGC 应用在苹果应用商店下架&#xff0c;包含数据采集和使用不够规范等问题。阿里云开源通义千问 70 亿参数模型&#xff0c;包括通用模型 Qwen-7 B 和对话模型 Qwen-7 B-Chat。腾讯混元大模型开始应用内测&#xff0c;内部多个业务线接入测试。百度智能云“千帆大模型平…

93 | Python 设计模式 —— 建造者模式

文章目录 什么是建造者模式?建造者模式的四个角色Python建造者模式示例建造者模式的优点建造者模式的适用场景案例1:股票价格监控案例2:天气预报系统总结当构建复杂对象时,经常会遇到对象的创建过程非常复杂、包含多个步骤、或者有不同的配置选项。这时,使用建造者模式是一…

【PostgreSQL内核学习(十一)—— OpenGauss源码学习(CopyTo)】

可优化语句执行 概述什么是列存储&#xff1f;列存的优势 相关函数CopyToCStoreCopyToCopyStatetupleDescCStoreScanDesc CStoreBeginScanRelationSnapshotProjectionInfo GetCStoreNextBatchRunScanFillVecBatchCStoreIsEndScan CStoreEndScan 声明&#xff1a;本文的部分内容…

ArcGIS API for JavaScript 调用自定义地图模板总结

ArcGIS API for JavaScript 调用自定义地图模板总结 3.9版本4.24版本 3.9版本 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Hello World</title><link rel"stylesheet" href&qu…

面试之快速学习SQL-基础增删改查语句

1. SELECT SELECT column1,column2,column3 FROM table_name;SELECT * FROM table_name;2. SQL SELECT DISTINCT 语句 在表中&#xff0c;可能会包含重复值。这并不成问题&#xff0c;不过&#xff0c;有时您也许希望仅仅列出不同&#xff08;distinct&#xff09;的值。 SE…

54款宝藏级AIGC工具分享(claude,Midjourney,Stable Diffusion等)

随着ChatGPT的一波又一波高潮&#xff0c;生成式AI逐渐进入人们视野&#xff0c;并开始大行其道&#xff0c;正如人们所说&#xff1a;AI用的好&#xff0c;天天下班早&#xff01; 当然&#xff0c;有效的利用AI不但能下班早&#xff0c;还能在上班时间摸鱼&#xff0c;就如潘…

【web逆向】全报文加密流量的去加密测试方案

aHR0cHM6Ly90ZGx6LmNjYi5jb20vIy9sb2dpbg 国密混合 WEB JS逆向篇 先看报文&#xff1a;请求和响应都是全加密&#xff0c;这种情况就不像参数加密可以方便全文搜索定位加密代码&#xff0c;但因为前端必须解密响应的密文&#xff0c;因此万能的方法就是搜索拦截器&#xff0c…

nginx的优化

一.、隐藏版本号 1、修改配置文件 /usr/local/nginx/conf/nginx.conf 在http模块下加入 server_tokens off; 2、在源码包&#xff08;安装包&#xff09;改 /src/core/nginx.h ldefine NGINX_VERSION "1.1.1”" #修改版本号 define NGINX_VER "burun/&qu…

0基础学习VR全景平台篇 第78篇:全景相机-拍摄VR全景

新手入门圆周率科技&#xff0c;成立于2012年&#xff0c;是中国最早投身嵌入式全景算法研发的团队之一&#xff0c;亦是全球市场占有率最大的全景算法供应商。相继推出一体化智能屏、支持一键高清全景直播的智慧全景相机--Pilot Era和Pilot One&#xff0c;为用户带来实时畅享…

【个人记录】CentOS7 编译安装最新版本Git

说明 使用yum install git安装的git版本是1.8&#xff0c;并不是最新版本&#xff0c;使用gitlab-runner托管时候会拉项目失败&#xff0c;这里使用编译源码方式安装最新版本的git。 基础环境安装 echo "nameserver 8.8.8.8" >> /etc/resolv.conf curl -o /…

算法基础之插入排序

1、插入排序基本思想 插入排序的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place排序&#xff08;即只需用到O(1)的额外空间的排序&#xff09;&a…

Shell编程基础(十五)文本三剑客(sed)

文本三剑客&#xff08;sed&#xff09; 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理&#xff0c;可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…

【论文阅读】UNICORN:基于运行时来源的高级持续威胁检测器(NDSS-2020)

UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats NDSS-2020 哈佛大学 Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020. 源码&…

vue3 excel 导出功能

1.安装 xlsx 库 npm install xlsx2.创建导出函数 src/utils/excelUtils.js import * as XLSX from xlsx;const exportToExcel (fileName, datas, sheetNames) > {// 创建工作簿const wb XLSX.utils.book_new()for (let i 0; i < datas.length; i) {let data datas…

24届近5年上海交通大学自动化考研院校分析

今天给大家带来的是上海交通大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、上海交通大学 学校简介 上海交通大学是我国历史最悠久、享誉海内外的高等学府之一&#xff0c;是教育部直属并与上海市共建的全国重点大学。经过120多年的不懈努力&#xff0c;上海交…

【深度学习注意力机制系列】—— ECANet注意力机制(附pytorch实现)

ECANet&#xff08;Efficient Channel Attention Network&#xff09;是一种用于图像处理任务的神经网络架构&#xff0c;它在保持高效性的同时&#xff0c;有效地捕捉图像中的通道间关系&#xff0c;从而提升了特征表示的能力。ECANet通过引入通道注意力机制&#xff0c;以及在…