CF853C_Boredom
给定一个有n个元素的序列a。你可以做若干次操作。在一次操作中我们可以取出一个数(假设他为x)并删除它,同时删除所有的序列中值为x+1和x-1的数。这一步操作会给玩家加上x分。
分析:
设dp[i] [0/1] 代表取到 i 这个值时的最大分值,设cnt[i] 代表i出现总次数, 则有两种情况:
-
dp[i] [0] = max (dp[i-1] [0/1])
-
dp[i] [1] = dp[i-1] [0] + cnti[i] * i = max(dp[i-2] [0/1]) + cnt[i] * i
注意 i=1 时影响不到除了2外的数,所以dp[1]初始化为cnt[1]*1
并且我们会发现,i-1很可能不存在,所以直接将i-1之前的最佳状态转移给 i-1就可以了