【Codeforces 1106E】 Lunar New Year and Red Envelopes

Codeforces 1106 E

题意:有\(k\)个红包,第\(i\)个红包可以在\(s_i\)\(t_i\)的时间内抢,同时获得\(w_i\)的钱,但是抢完以后一直到\(d_i\)都不可以继续抢,\(bob\)\(1\)\(n\)的时间内可以抢红包,他的策略是在第\(i\)个时间点内找\(w_i\)最大的红包,如果有相同找\(d_i\)最大的,再相同就随便挑,但是\(alice\)可以在最多\(m\)个时间点内打扰\(bob\),在\(alice\)打扰的那个时间点内\(bob\)无法抢红包,问\(bob\)能获得的最少钱数。

思路:首先确定\(bob\)在第\(i\)个时间点会取哪个红包,把所有红包按题意排好序后遍历一遍,到第\(i\)个红包时就把\(s_i\)\(t_i\)刷成i,用并查集来实现区间染色,然后考虑\(dp\)\(dp(i,j)\)表示在前\(i\)个时间点中,\(bob\)\(alice\)打扰了\(j\)次,\(bob\)所能获得的最差钱数,然后状态转移方程就分两种情况考虑:
\(dp(i+1,j+1)=min(dp(i,j),dp(i+1,j+1))​\)

\(dp(d_{best_i}+1,j)=min(dp(i,j)+w_{best_i},dp(d_{best_i}+1,j))\)

反思:题意中加粗的地方。原来只是求了\(dp(n,m)\),但其实是\(min_{j=0}^m dp(n,j)\),然后还把\(j\)写成\(m\)了。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10467981.html