重复の任务:线段树、背包DP、高精度
题意简述
一个任务系统,JW 需要完成一系列任务来获得“同祝”。每个任务都有一定的送祝福数量和收到“同祝”数量,且任务的完成会消耗一定的精力。JW 的精力是有限的,我们需要计算在精力用完前,JW 最多能收集到多少个“同祝”。
解题思路
本题具有很明显的背包dp和线段树特征与特性。
任务的计算
对于第 iii 个任务,f(i)f(i)f(i) 表示送祝福数量与收到“同祝”数量的和。
对于第 111 个任务,f(1)=a1+b1+max(a1,b1)f(1)=a_1+b_1+max(a_1,b_1)f(1)=a1 +b1 +max(a1 ,b1 )。
对于第 i(i≥2)i(i≥2)i(i≥2),f(i)f(i)f(i) 的计算涉及到前 aia_iai 和 bib_ibi 个任务 f(j)f(j)f(j) 的和,以及这些任务中 f(j)f(j)f(j) 的最大值。
背包DP
本题的数据 kik_iki 的范围较大,所以需要使用优化。(题解采用二进制优化,也可选择单调队列优化)
正解
由于数据可能过大,这里使用高精度算法进行加和乘的操作。
时间复杂度:O(NlogN+N×w[0])O(N\log N+N\times w[0])O(NlogN+N×w[0])
预计得分:180pts180pts180pts