[Luogu] P1987 摇钱树

(Link)

Description

Cpg 正在游览一个梦中之城,在这个城市中有 (n) 棵摇钱树。这下,可让 Cpg 看傻了。可是Cpg 只能在这个城市中呆 (k) 天,但是现在摇钱树已经成熟了,每天每棵都会掉下不同的金币 ( 不属于Cpg ! ) 。Cpg 每天可以砍掉其中一颗,并获得其树上所有的金币 (怎么会有这种好事 ) 。请你帮助 Cpg 算出他在这 (k) 天中最多能获得多少金币。

Solution

设第(i)棵树第(d)天摘,第(i+1)棵树第(d+1)天摘的贡献为(s1),第(i)棵树第(d+1)天摘,第(i+1)棵树第(d)天摘的贡献为为(s2),则(s1>s2)当且仅当(a_i-d*b_i+a_{i+1}-(d+1)*b_{i+1}>a_i-(d+1)*b_i+a_{i+1}-d*b_{i+1}),解得(b_i>b_{i+1})

所以我们按(b_i)从大到小排序后,就可以(01DP)了。

[dp[i][j]=max left{egin{array}{l} dp[i-1][j] \ dp[i-1][j-1]+max (0, a[i]-b[i] *(j-1)) end{array} ight. ]

可以滚动掉第一维。

原文地址:https://www.cnblogs.com/andysj/p/13869187.html