会员体系分为大众、白银、黄金、铂金和钻石会员五个等级,等级由成长值决定,成长值越高,等级也就越高,也能够享受更多的会员权益。这天,小塔发现可以通过完成每日任务的方式快速获得成长值提升等级!一共有n个任务,每天都会解锁一个新的任务,第i个任务达成后可以获得ai点成长值奖励。为了鼓励用户参与任务,在开始任务之前,还可以进入“挑战”模式,即预先设置自己能够坚持的天数x,在完成挑战后,可以得到前张奖励翻倍卡,你可以自由选择翻倍卡的使用顺序,使得每一天的成长值奖励翻倍,第i张翻倍卡可以将任务完成后的成长值奖励乘以bi倍,例如:第一天任务奖励1点成长值,第二天任务奖励2点成长值,奖励一张四倍翻倍卡和一张两倍翻倍卡,那么最少可以得到8点成长值,最多可以得到10点成长值。小塔比较偷懒,他想要找到最少需要坚持的天数,使得自己能够获得至少m点成长值。
此题其实就是一个经典的二分想法,当选定了天数之后,不难知道想要得到最大的成长值只需要将前面的天数的成长值和翻倍卡分别排序,大成长值使用大翻倍卡,此即为最大的成长值,并且当一个天数满足要求后,那么比他大的天数均满足要求,利用这个性质可以对天数进行二分,详情见代码
import java.util.*;
class Main {
public static void main(String[] args) {
本题属于以下题库,请选择所需题库进行购买