【Codeforces 1106E】Lunar New Year and Red Envelopes

【链接】 我是链接,点我呀:)
【题意】


给你k个红包,每个红包可以在si..ti的时间范围内拿走。
抢完红包之后你得到wi元,然后你需要在di+1时刻才能继续抢红包
时间是线性的从1..n
然后某个人可以阻止你在x时刻抢红包,然后你的时间跳过1s(-1s)直接到达x+1时刻.
这个人可以阻止你m次。
请问这个人采用最优阻止策略下,你最少抢到的金额。
(如果有多个可以抢的红包,那么抢wi最大的,如果仍然相同抢di最大的,再相同的话就无所谓了,因为选哪个都一样了)

【题解】


dp
设dp[i][j]表示i时刻已经用了j次阻止机会,后面能抢到的最少金额.
我们可以用sort+优先队列求出choose[i]
即表示i时刻你会选择哪一个红包(注意是排序后的红包QAQ)
那么在i时刻有两种选择
1.这个人进行干扰
那么转移到dp[i+1][j+1]
2.这个人不进行干扰
那么如果i时刻有的选
就转移到dp[a[choose[i]].d+1][j]+a[choose[i]].w
如果没得选就转移到dp[i+1][j]

每次取最小值就好
记得开long

上一篇:[SUCTF 2019]EasySQL


下一篇:农历日期与阳历日期互转