[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\{\begin{array}{l} dp[i-1][j] \\ dp[i-1][j-1]+\max (0, a[i]-b[i] *(j-1)) \end{array}\right. \]

可以滚动掉第一维。

posted @ 2020-10-24 13:33  andysj  阅读(64)  评论(0编辑  收藏  举报