#P11980. [KTSC 2021] 会议室 / meeting
[KTSC 2021] 会议室 / meeting
题目背景
本题翻译自 2021년도 국제정보올림피아드 대표학생 선발고사 2차 선발고사 #2 회의실。
提交时,请在程序开头添加如下内容,并且无需引用 meeting.h
:
#include <vector>
long long min_charge(int K, std::vector<int> S, std::vector<int> E, std::vector<int> W);
题目描述
有 个会议室。 个会议需要使用这些会议室。每个会议被赋予从 到 的编号。会议 用开始时间 、结束时间 和违约金 表示。
这些会议室按照非常特殊的规则运营。会议 和会议 如果满足以下至少一个条件,则称为相关会议:
- 两个区间 和 有公共部分时(包括仅起点或终点接触的情况), 和 是相关会议。
- 两个区间 和 没有公共部分,但存在另一个会议 与 相关,且 和 有公共部分时(包括仅起点或终点接触的情况), 和 是相关会议。
会议可能被取消,因此上述定义仅基于未被取消的会议判断。即,原本相关的两个会议可能因部分会议被取消而变得不相关。
未被取消的会议必须分配到一个会议室。相关会议必须分配到不同的会议室。例如,三个会议 中,尽管 和 没有公共部分,但仍需分配三个会议室。由于只有 个会议室,可能需要取消部分会议。取消会议 需支付违约金 ,因此需要精心选择取消的会议,使违约金总和最小。
下图展示了 个会议 ,违约金分别为 的情况。假设有 个会议室。左侧示例取消了 ,违约金为 ;右侧示例取消了 和 ,违约金为 。所有情况中,最小违约金总和为 。
实现细节
需实现以下函数:
long long int min_charge(int K, vector<int> S, vector<int> E, vector<int> W)
- 此函数仅被调用一次。
- 为会议室数量。
- 的长度均为 。
- 会议 的开始时间为 ,结束时间为 ,违约金为 ()。
- 此函数需根据会议室数量和会议信息,找到满足条件的最小违约金总和并返回。
提交的源代码中不得调用任何输入输出函数。
输入格式
示例评测程序输入格式:
- 第 行:
- 第 行():
输出格式
示例评测程序输出格式:
- 第 行:
min_charge
函数返回值
实际评测程序可能与示例评测程序不同。
5 2
1 4 1
3 6 2
5 8 5
7 10 2
9 12 1
3
5 1
2 6 5
4 6 2
8 8 5
1 3 4
6 8 7
12
提示
约束条件
- ()
- ()
子任务
- ( 分)
- ( 分)
- ( 分)
- 所有 满足
- ( 分)
- ( 分)
- 无额外约束。
评分标准
min_charge
函数返回的违约金总和必须与正确答案一致。
各子任务得分为该子任务所有测试数据得分的最小值。
示例
-
,,,, 时,评测程序调用:
min_charge(2, [1, 3, 5, 7, 9], [4, 6, 8, 10, 12], [1, 2, 5, 2, 1])
根据题目描述中的示例,函数应返回 。
请注意此示例不满足子任务 和 的约束条件。