这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
2020-2021:teams:the_great_wave_off_kanagawa:week_summary_6 [2020/07/18 00:08] lkw981105 [Ket98] |
2020-2021:teams:the_great_wave_off_kanagawa:week_summary_6 [2020/07/24 14:38] (当前版本) kazamori [kazamori] |
||
---|---|---|---|
行 6: | 行 6: | ||
AIsing Programming Contest 2020 E Camel Train | AIsing Programming Contest 2020 E Camel Train | ||
+ | |||
+ | 分类:贪心,数据结构 | ||
+ | |||
+ | 题意:有$n$只骆驼。对于第$i$只骆驼,给出三个正整数$K_i,L_i,R_i$,表示如果把这只骆驼放在前$K_i$的位置,就会有收益$L_i$,否则会有收益$R_i$。问最大收益。 | ||
+ | |||
+ | 思路: | ||
这题比赛时没有做出来,后来发现用优先队列可以解决。每个骆驼有两个快乐值,用pair保存,然后用两个vector $L$和$R$存放各个骆驼,分三种情况: | 这题比赛时没有做出来,后来发现用优先队列可以解决。每个骆驼有两个快乐值,用pair保存,然后用两个vector $L$和$R$存放各个骆驼,分三种情况: | ||
行 23: | 行 29: | ||
==== kazamori ==== | ==== kazamori ==== | ||
- | CF 1374E2 Reading Books | + | CF 1382D Unmerge |
- | * 分类:贪心 | + | * 分类:dp 背包 |
- | * 简要题意: 有两个人以及n本书,每本书有3个属性:t:表示读完这本书要的时间,a:第一个人是否喜欢这本书,b:第二个人是否喜欢这本书。让你构造一种方案使得他们读的书正好是m本,并且这些书中第一个人喜欢的书有>=k本,第二个人喜欢的书有>=k本,并且读书总时间最少。 | + | * 简要题意: 询问是否可以将原序列分成两个长度相等的序列(相对顺序不变),使得按照归并排序里的merge操作过后,还是原序列。 |
- | * 解法: 先将每本书按a,b属性分类(00,01,10,11)按时间从小到大放入各自的优先队列,然后贪心选择数量最少且时间和尽量小的x本书,满足a,b属性此时的和均>=k(先尽量选择属性为11的书,若不够则从队首选择属性为01,10的两本书)。若此时x>m,则不存在满足条件的方案。否则记录此时未选中的所有的书,并放入优先队列。若此时选中的属性为11的书中时间最大的加上未选中的书中时间最小的时间和小于未选中的属性为10的书中时间最小以及未选中的属性为01的书中时间最小的时间和,则进行替换并x++,并更新未选中的书的优先队列。否则选择未选中的书中的队首,并x++。当x==m时,输出方案。 | + | * 解法: 依次寻找当先序列中的最大数,记录其到结尾的长度,并截断。最后转换成背包问题,判断是否存在一些长度的和恰好为n。 |
==== Ket98 ==== | ==== Ket98 ==== | ||
行 52: | 行 58: | ||
=== 比赛 === | === 比赛 === | ||
- | * 无 | + | * [[https://codeforces.com/contest/1382|CF 658]] |
==== Ket98 ==== | ==== Ket98 ==== | ||