zoukankan      html  css  js  c++  java
  • Sue的小球

    貌似挺容易的。

    将输入数据离散化一遍,前缀和处理出点与点之间的距离,某一个区间每秒损失权值。

    F[i][j][0/1]为区间i,j关完在 左边/右边 的最小失去权值。

    这样我们的状态转移方程就是

    F[i][j][1]=max(F[i][j-1][0]-Time(i,j)*Except(i,j-1)) 
    // 拿到i->j-1 后在这段区间的左边,往右走到 j 的过程中 我们花去了Time的时间,在这段时
    
    // 间里,其他物品往下掉了(我们损失总价值是)Except*Time
    
    F[i][j][1]=max(F[i][j-1][1]+Time(j-1,j)*Except(i,j-1)) // 从最右端走一个单位
    
    

    同理:

    F[i][j][0]=max(F[i+1][j][1]-Time(i,j)*Except(i+1,j))
    
    F[i][j][0]=max(F[i+1][j][0]-Time(i,i+1)*Except(i+1,j))
    
    

    最终的答案便是:

    [ sum_{i=1}^{i<=n} Y[i]-min{f_{1,n,0},f_{1,n_1}} ]

    知识点:

    1. 当区间满足 (i,k)+(k+1,j)=(i,j-1)+(j,j)时,我们往往可以将(n^3)的方程变成(n^2)
    2. 当我们没办法表示一个区间内的局部最优解时,我们不妨直接在总答案里加上贡献。 如 树上染色
  • 相关阅读:
    linux 下怎么看postgresql安装到哪个目录了?
    sqlserver 存储image 语句
    thinkphp5.1 配置使用
    百度车牌识别demo
    elastticsearch 安装
    InDB开发
    John爆破密码
    域传送漏洞
    新远程下载方式(IME)
    SSH端口转发
  • 原文地址:https://www.cnblogs.com/guodongLovesOi/p/11651060.html
Copyright © 2011-2022 走看看