LeetCode 1751. 最多可以参加的会议数目 II(DP + 二分查找)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个 events 数组,其中 events[i] = [startDayi, endDayi, valuei] ,表示第 i 个会议在 startDayi 天开始,第 endDayi 天结束,如果你参加这个会议,你能得到价值 valuei 。
同时给你一个整数 k 表示你能参加的最多会议数目。

你同一时间只能参加一个会议。如果你选择参加某个会议,那么你必须 完整 地参加完这个会议。
会议结束日期是包含在会议内的,也就是说你不能同时参加一个开始日期与另一个结束日期相同的两个会议。

请你返回能得到的会议价值 最大和

示例 1:

输入:events = [[1,2,4],[3,4,3],[2,3,1]], k = 2
输出:7
解释:选择绿色的活动会议 01,得到总价值和为 4 + 3 = 7

示例 2:
在这里插入图片描述

输入:events = [[1,2,4],[3,4,3],[2,3,10]], k = 2
输出:10
解释:参加会议 2 ,得到价值和为 10 。
你没法再参加别的会议了,因为跟会议 2 有重叠。你 不 需要参加满 k 个会议。

示例 3:

在这里插入图片描述

输入:events = [[1,1,1],[2,2,2],[3,3,3],[4,4,4]], k = 3
输出:9
解释:尽管会议互不重叠,你只能参加 3 个会议,所以选择价值最大的 3 个会议。提示:
1 <= k <= events.length
1 <= k * events.length <= 10^6
1 <= startDayi <= endDayi <= 10^9
1 <= valuei <= 10^6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dp[i][k] 表示 遍历完 第 i 个会议,开了k次会,的最大收益
  • 按结束时间排序
  • 对每个 i 会议,二分查找前面最近的 无干涉的会议 j
  • 如果不存在,那么就只能开会议 i
  • 如果存在,就从 j 转移到 i,枚举 次数
  • 还有 i 会议 不参加,就从 i-1 复制过来
class Solution {
public:int maxValue(vector<vector<int>>& events, int k) {sort(events.begin(), events.end(),[&](auto a, auto b){return a[1] < b[1];//结束时间排序});int n = events.size();vector<vector<int>> dp(n, vector<int>(k+1, -1));// dp[i][k] 表示 遍历完 第 i 个会议,开了k次会,的最大收益dp[0][0] = 0;dp[0][1] = events[0][2];for(int i = 1; i < n; i++)//转移到i会议,查找之前可以转移过来的j{   // 二分查找时间不冲突的,最晚的结束的会议 jint l = 0, r = i-1, mid, j = n;while(l <= r){mid = l+((r-l)>>1);if(events[mid][1] >= events[i][0])//时间冲突r = mid-1;else{if(mid==n-1 || events[mid+1][1] >= events[i][0]){j = mid;break;}elsel = mid+1;}}// i 会议不开for(int t = 0; t <= k; ++t)dp[i][t] = max(dp[i][t], dp[i-1][t]);// 没有可以转移到 i 的会议if(j == n) //只能开一个会议,idp[i][1] = max(dp[i][1], events[i][2]);else // j 可以转移到 i 会议for(int t = 0; t < k; ++t)//原来开了多少次会{dp[i][t+1] = max(dp[i][t+1], dp[j][t]+events[i][2]);}}int ans = 0;for(int t = 0; t <= k; ++t)ans = max(ans, dp[n-1][t]);return ans;}
};

1764 ms 238.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 992. K 个不同整数的子数组(双指针)

文章目录1. 题目2. 解题1. 题目 给定一个正整数数组 A&#xff0c;如果 A 的某个子数组中不同整数的个数恰好为 K&#xff0c;则称 A 的这个连续、不一定独立的子数组为好子数组。 &#xff08;例如&#xff0c;[1,2,3,1,2] 中有 3 个不同的整数&#xff1a;1&#xff0c;2&a…

压缩可以卸载吗_番禺街坊注意!微信发送高清大文件不压缩,网友:QQ可以卸载了?...

刚上新了表情包的微信又双叒叕出新功能了这次的功能有点实用昨天&#xff0c;腾讯微信团队宣布微信已支持向朋友发送高清视频和图片且不会被压缩微信用户点击对话框右下角的号右滑点击文件在上方选择手机相册就能选择用户想要发送的视频和图片了目前通过「文件」方式发送的内容…

LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 和一个目标值 goal 。 你需要从 nums 中选出一个子序列&#xff0c;使子序列元素总和最接近 goal 。 也就是说&#xff0c;如果子序列元素和为 sum &#xff0c;你需要 最小化绝对差 abs(sum - goal) 。 返回 abs(sum …

路由器距离向量算法计算举例_路由器基本原理是什么 路由器基本发展情况介绍【图文】...

PLC路由器原理和ARR路由器基本原理要实现网络中通信节点彼此之间的通信&#xff0c;首先必须给每个节点分配一个唯一的IP地址。路由器应该至少有两个网络端口&#xff0c;分别连接LAN或者WAN子网上&#xff0c;每个端口必须具有一个唯一的IP地址&#xff0c;并且要求与所连接IP…

LintCode MySQL 1918. 第二高的球员的身高

文章目录1. 题目2. 解题1. 题目 编写一个 SQL 语句&#xff0c;获取球员 (players) 表中第二高的身高 (height) 表定义: players (球员表) https://www.lintcode.com/problem/1918 2. 解题 if(a,b,c), a true&#xff0c;执行 b&#xff0c; 否则 c -- Write your SQL Que…

python中使用opencv_如何在Python中使用OpenCV Stitcher类?

你正确使用它,因为某些原因导致进程失败. 结果元组的第一个值是错误代码,0表示成功.这里你得到1,这意味着,根据stitching.hpp,这个过程需要更多的图像. enum Status { OK 0, ERR_NEED_MORE_IMGS 1, ERR_HOMOGRAPHY_EST_FAIL 2, ERR_CAMERA_PARAMS_ADJUST_FAIL 3 }; ERR_NEE…

《高可用MySQL》2 – 单机版MySQL主从配置

这里搭建的主从是最简单的单一主从复制&#xff08;即一个Master和一个slave&#xff0c;没有任何的热机备份和多slave&#xff09;&#xff0c;该主从结构的基本拓扑图如下所示&#xff1a; 建立基本的主从复制可以总结为以下三个基本步骤&#xff1a; 配置master服务器配置sl…

LintCode MySQL 1936. 张三的故事 III

文章目录1. 题目2. 解题1. 题目 记者调查发现&#xff0c;张三所在学校还有一金牌教师&#xff0c;其所带的学生毕业后人均知名学府。 记者对该老师所教的学生的情况产生了好奇。 students 表中记录了学生的姓名以及班级 (class_id)&#xff0c;classes 表中记录了班级的名称以…

语言4位bcd码怎么加加_S7300400如何使用SCL语言调用SFC1(READ_CLK)读取日期和时间?...

系统功能 SFC1 用于读取 CPU 的系统时钟。系统时钟存储在数据类型为DATE_AND_TIME的变量里。通过指针访问系统时钟的单个组成元素。数据类型DATE_AND_TIME所包含的关于年、月、日、时等信息是以 BCD 码的格式存储在 8 个字节里。该数据类型显示的范围是&#xff1a;DT#1990-1-1…

LintCode MySQL 1932/1933. 挂科最多的同学 I / II

文章目录1. 题目2. 解题1. 题目 exams 表中存放着同学们的考试记录 请用 SQL 语句&#xff0c;找到挂科数最多的同学所对应的 student_id https://www.lintcode.com/problem/1932 2. 解题 -- Write your SQL Query here -- -- example: SELECT * FROM XX_TABLE WHERE XXX…

python 画三角函数_python,将三角函数绘制成二维数组

看起来a, b, c是常量&#xff0c;z是a和{}之间的np.linspace。在a 1 b 2 c 3 def triangle (z, a a, b b, c c): y np.zeros(z.shape) y[z < a] 0 y[z > c] 0 first_half np.logical_and(a < z, z < b) y[first_half] (z[first_half]-a) / (b-a) second…

LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。 一步操作中&#xff0c;你可以将任一 ‘0’ 变成 ‘1’ &#xff0c;或者将 ‘1’ 变成 ‘0’ 。 交替字符串 定义为&#xff1a;如果字符串中不存在相邻两个字符相等的情况&#xff0c;那…

python内置的集成开发工具是什么_python内置的集成开发工具是什么_后端开发

go语言之goroute协程_后端开发 协程&#xff08;coroutine&#xff09;是Go语言中的轻量级线程实现&#xff0c;由Go运行时&#xff08;runtime&#xff09;管理。下面就来由go入门教程栏目介绍一下go语言中的goroute协程。python内置的集成开发工具是什么 Python自带的集成开发…

SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中

最近&#xff0c;电脑重装系统之后&#xff0c;安装了SQL Server 2008。附加数据库文件的时候&#xff0c;发现无法附加&#xff0c;提示版本不对。想起来&#xff0c;原来的数据库版本是SQL Server 2008R2。低版本的数据库管理工具无法兼容高版本的数据库文件&#xff0c;所以…

python语言的注释语句引导符_Python 为什么用 # 号作注释符?

关于编程语言中的注释&#xff0c;其重要性基本上已为大家所共识。 然而关于注释的规范&#xff0c;这个话题就像我们之前聊过的缩进、终止符和命名方式一样&#xff0c;众口难调。 注释符通常可分为两种&#xff0c;即行注释与块注释&#xff08;inline/block&#xff09;&…

python 白化_MeteoInfo和Python显著性检验

MeteoInfo显著性检验&#xff1a;MeteoInfo官网&#xff1a;http://www.meteothink.org源代码&#xff1a;https://github.com/meteoinfofn F:/RMeteoInfo/data/test.txtny 71nx 144m ny * nxn 62ss1 asciiread(fn, shape(71,144,n))ss1 ss1[::-1,::1,:]X ss1.reshape(…

LeetCode 1760. 袋子里最少数目的球(二分查找)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次&#xff1a; 选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&a…

判断鼠标不在控件上_VB常用控件属性讲解单选按钮、复选框总结

1单选按钮、复选框做为VB编程中的选择性控件&#xff0c;在实际程序中有着广泛的应用&#xff0c;所以熟练掌握其特殊属性的用法就很重要了&#xff01;单选按钮、复选框的实际应用图复选框(CheckBox)控件属性说明Name复选框控件的名称Alignment设置标题文本的对齐方式, 取值为…

LeetCode 1763. 最长的美好子字符串

文章目录1. 题目2. 解题1. 题目 当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中&#xff0c;就称这个字符串 s 是 美好 字符串。 比方说&#xff0c;"abABB" 是美好字符串&#xff0c;因为 ‘A’ 和 ‘a’ 同时出现了&#xff0c;且 ‘B’ 和 ‘…

linux下的socket通信小程序分享——第三圣子

第三圣子 最近学习unix网络编程&#xff0c;感觉东西零零碎碎&#xff0c;比较混乱。因此决定整理以下&#xff0c;发一个小博客。一来可以与大家分享以下&#xff0c;二来可以总结提高一下所学的东西。话说&#xff1a;竹子为什么长的高&#xff0c;因为它喜欢总结阿&#xff…