zoukankan      html  css  js  c++  java
  • [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. ]

    可以滚动掉第一维。

  • 相关阅读:
    队列
    集合
    运算符
    数组
    项目研发常用的优化策略——遮挡剔除(Occlusion Culling)
    Unity专题_简单的寻路导航
    Unity重要脚本函数
    Unity输入管理器
    Unity脚本的生命周期
    接口
  • 原文地址:https://www.cnblogs.com/andysj/p/13869187.html
Copyright © 2011-2022 走看看