救救我!!!!!!

题目总版

Dc_dingxinyan @ 2024-09-15 16:04:06

AliceAlice和 BobBob一共有nn本书要读。第 ii 本书有三个属性:阅读时间ti,aiti​,ai​(为11 表示AliceAlice 喜欢这本书,为 00表示AliceAlice 不喜欢),bibi​(为11表示BobBob 喜欢这本书,为00表示 BobBob 不喜欢)。

他们需要从这些书中选择若干本,满足

这些书中至少有kk本是 Alice 喜欢的,至少有kk本是 Bob 喜欢的。
阅读的总时间最小(总时间为选中的书的titi​的总和)

输出最小的时间TT。

如果无解,输出−1−1。


by ImposterAnYu @ 2024-09-15 16:44:05

@Dc_dingxinyan (1) ++cnt1

(2) p3+1+cnt3

(3) 0

(4) p1[i]

(5) -1


by Dc_dingxinyan @ 2024-09-15 16:46:11

@3247535661


by Dc_dingxinyan @ 2024-09-15 16:49:20

@ImposterAnYu 为啥


by ImposterAnYu @ 2024-09-15 17:22:08

@Dc_dingxinyan (1) p1数组用来装Alice和Bob都喜欢的书,根据后面的 p2[++cnt2]p3[++cnt3],显然此处为 p1[++cnt1]

(2)p2和p3分别装Alice喜欢的书和Bob喜欢的书。根据 sort(p2+1,p2+1+cnt2,cmp); 易得后面为 sort(p3+1,p3+1+cnt3,cmp);

至于为什么?因为我们采用的是贪心策略,尽量选时间小的,所以将每类书要用的时间从小到大排序。

(3)初始化。因为统计的是时间之和,所以将变量初始化为 0

(4)我们将只有A喜欢的书和只有B喜欢的书一一对应后,可以合并成一本AB都喜欢的书。这时,所有待选的书都在p1数组里。res 统计的是时间和,所以加上的自然是时间最短的 k 本书的时间。而循环中枚举的 i 满足 1 \leq i \leq k,所以直接加 p1_i

(5)cnt1 < k 时,即使选完所有书也不能满足条件,无解,所以输出 -1


上一页 |