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)初始化。因为统计的是时间之和,所以将变量初始化为
(4)我们将只有A喜欢的书和只有B喜欢的书一一对应后,可以合并成一本AB都喜欢的书。这时,所有待选的书都在p1数组里。res
统计的是时间和,所以加上的自然是时间最短的
(5)