2022-01-01:给定int[][] meetings,比如 { {66, 70} 0号会议截止时间66,获得收益70 {25, 90} 1号会议截止时间25,获得收益90
2022-01-01:给定int[][] meetings,比如
{
{66, 70} 0号会议截止时间66,获得收益70
{25, 90} 1号会议截止时间25,获得收益90
{50, 30} 2号会议截止时间50,获得收益30
}
一开始的时间是0,任何会议都持续10的时间,但是一个会议一定要在该会议截止时间之前开始,
只有一个会议室,任何会议不能共用会议室,一旦一个会议被正确安排,将获得这个会议的收益。
请返回最大的收益。
答案2022-01-01:
按截止时间从小到大排序,小根堆。
代码用golang编写。代码如下:
package main
import (
"fmt"
"sort"
)
func main() {
meetings := [][]int{{6, 20}, {9, 50}, {13, 42}}
ret := maxScore1(meetings)
fmt.Println(ret)
ret = maxScore2(meetings)
fmt.Println(ret)
}
func maxScore1(meetings [][]int) int {
//Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
sort.Slice(meetings, func(i, j int) bool {
return meetings[i][0] < meetings[j][0]
})
//int[][] path = new int[meetings.length][];
path0 := make([][]int, len(meetings))
for i := 0; i < len(meetings); i++ {
path0[i] = make([]int, 2)
}
size := 0
return process1(meetings, 0, path0, size)
}
func process1(meetings [][]int, index int, path0 [][]int, size int) int {
if index == len(meetings) {
time := 0
ans := 0
for i := 0; i < size; i++ {
if time+10 <= path0[i][0] {
ans += path0[i][1]
time += 10
} else {
return 0
}
}
return ans
}
p1 := process1(meetings, index+1, path0, size)
path0[size] = meetings[index]
p2 := process1(meetings, index+1, path0, size+1)
// path[size] = null;
return getMax(p1, p2)
}
func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
}
func maxScore2(meetings [][]int) int {
sort.Slice(meetings, func(i, j int) bool {
return meetings[i][0] < meetings[j][0]
})
heap := make([]int, 0)
time := 0
// 已经把所有会议,按照截止时间,从小到大,排序了!
// 截止时间一样的,谁排前谁排后,无所谓
for i := 0; i < len(meetings); i++ {
if time+10 <= meetings[i][0] {
heap = append(heap, meetings[i][1])
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
time += 10
} else {
if len(heap) > 0 && heap[0] < meetings[i][1] {
heap[0] = meetings[i][1]
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
}
}
}
ans := 0
for len(heap) > 0 {
ans += heap[0]
heap = heap[1:]
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
}
return ans
}
执行结果如下:

2022-01-01:给定int[][] meetings,比如 { {66, 70} 0号会议截止时间66,获得收益70 {25, 90} 1号会议截止时间25,获得收益90的更多相关文章
- (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》
移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...
- (二)u-boot2013.01.01 for TQ210:《Makefile分析》
当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...
- (一)u-boot2013.01.01 for TQ210:《Uboot简介》
一直想写一个s5pv210硬件平台的u-boot的移植文档,但一直都忙着没时间写.先写一些u-boot的脚本分析吧,包括makefile,mkconfig,config.mk,主要侧重于语法句意的分析 ...
- org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
Jackson对于date的反序列化只支持几种,如果不符合默认格式则会报一下错误 org.codehaus.jackson.map.JsonMappingException: Can not cons ...
- 2015.12.25-2016.01.01 大论文迭代B
大论文B轮迭代,稍重前端 12.25 周五,完善摘要 12.26 周六,完善第一章 12.27 周天,完善第二章 12.28 周一,完善第三章 12.29 周二,完善第四章 12.30 周三,完善第五 ...
- 2019.01.01 bzoj3625:小朋友和二叉树(生成函数+多项式求逆+多项式开方)
传送门 codeforces传送门codeforces传送门codeforces传送门 生成函数好题. 卡场差评至今未过 题意简述:nnn个点的二叉树,每个点的权值KaTeX parse error: ...
- 2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)
4725传送门 4726传送门 解析 代码: #include<bits/stdc++.h> #define ri register int using namespace std; in ...
- for循环练习题(1 ,判断任意一个数是91的多少倍 2,编写程序实现给定一个整数判断它从0到这个整数中间出现多少次9的次数)
1 //判断任意一个数是9的多少倍 #include <stdio.h> #include <stdlib.h> int main() { printf("请输入任意 ...
- c/c++ int数组初始化/重置为0
1.int数组其实初始化的时候默认就是全部为0 int a[1000];int a[1000] = {0}; 以上2种写法其实都可以 注意:int a[1000] = {0};这种方法如果想把整形数组 ...
- day 01 常量 注释 int(整型) 用户交互input 流程控制语句if
python的编程语言分类(重点) if 3 > 2: 编译型: 将代码一次性全部编译成二进制,然后再执行. 优点:执行效率高. 缺点:开发效率低,不能跨平台. 代表语言:C 解释型: 逐行解释 ...
随机推荐
- JConsole连接远程Java进程
1.Java进程启动新增如下参数 java -Djava.rmi.server.hostname=118.89.68.13 #远程服务器ip,即本机ip -Dcom.sun.management.jm ...
- JWT用户认证体系
依赖 <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifa ...
- linux网络编程中的errno处理
在Linux网络编程中,errno是一个非常重要的变量.它记录了最近发生的系统调用错误代码.在编写网络应用程序时,合理处理errno可以帮助我们更好地了解程序出现的问题并进行调试. 通常,在Linux ...
- Facebook 的 Thrift
更多内容,前往个人博客 Thrift 源于 Facebook,在 2007 年 Facebook 将 Thrift 作为一个开源项目提交给了 Apache 基金会.对于当时的 Facebook 来说, ...
- Java面试——JVM知识
一.什么情况下会发生栈内存溢出 [1]线程请求的栈深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常.递归的调用一个简单的方法,不断累积就会抛出 StackOverflow ...
- Mysql 备份方案
一.为什么要备份 [1]容灾恢复:硬件故障.不经意的 Bug 导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用等(例如:机房大楼烧毁,恶意的黑客攻击或 Mysql 的 Bug 等).[2 ...
- 系统评价——层次分析法AHP的R语言实现(四)
对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方法最终要对被评价对象作出 ...
- 快速部署Ceph分布式高可用集群
快速部署Ceph分布式高可用集群 Ceph简介 Ceph是一个PB,EB级别的分布式存储系统,可以提供文件存储,对象存储.和块存储,它可靠性高,易扩展,管理简便,其中对象存储和块存储可以和其他云平台集 ...
- mariabackup -prepare step on increment backup failed
问题描述:使用mariabackup对maridb10.6.4进行物理备份,进行增量恢复的时候报错.截止到目前,还是mariadb的一个bug,还没有修复.在增备的过程中如果出现新库的建立,数据库就会 ...
- HTML、 input;、accept 属性-规定能够通过文件上传进行提交的文件类型
定义和用法 文章地址: http://www.w3school.com.cn/tags/att_input_accept.asp accept 属性规定了可通过文件上传提交的服务器接受的文件类型. 注 ...