• mc


    Description
    小C在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,
    每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧场一直到它西边第一个控制站的所有牧场
    (它西边第一个控制站所在的牧场不被控制)(如果它西边不存在控制站,那么它控制西边所有的牧场),
    每个牧场被控制都需要一定的花费(毕竟在控制站到牧场间修建道路是需要资源的嘛~),
    而且该花费等于它到控制它的控制站之间的牧场数目(不包括自身,但包括控制站所在牧场)乘上该牧场的放养量,
    在第i个牧场建立控制站的花费是ai,每个牧场i的放养量是bi,理所当然,小C需要总花费最小,但是小C的智商有点不够用了,所以这个最小总花费就由你来算出啦。
    Input
    第一行一个整数 n 表示牧场数目
    第二行包括n个整数,第i个整数表示ai
    第三行包括n个整数,第i个整数表示bi
    Output
    一行一个整数表示最小花费
    Sample Input
    样例输入:

    4
    2 4 2 4
    3 1 4 2

    样例输出:

    9

    样例解释:选1,3,4建 费用为2+1*1+2+4=9
    HINT
    数据范围:

    对于40%的数据n < 1000
    对于100%的数据n < 1000000,ai,bi < 1000


    f[i] = sigma(j, 0, i - 1) (f[j] + (s[i] - s[j]) * i -plus[i] + plus[j]) + a[i]
    = f[j] + s[i] * i - s[j] * i - plus[i] + plus[j] + a[i]
    令 k < j 且 j 比 k优
    则有
    f[k] + s[i] * i - s[k] * i - plus[i] + plus[k] + a[i] > f[j] + s[i] * i - s[j] * i - plus[i] + plus[j] + a[i]
    f[k] - s[k] * i + plus[k] > f[j] - s[j] * i + plus[j]
    f[j] - f[k] + plus[j] - plus[k] < i * (s[j] - s[k])
    (y[j] - y[k]) / (x[j] - x[k]) < i
    令 l < k 且 slope(k, l) > slope(j, k)
    则有
    ① slope(k, l) > slope(j, k) > i, 则虽有k比j优, 但又有l比k优, 所以可排除k
    ② slope(k, l) > slope(j, k) < u, 则有j比k优, 排除k
    综上, 在队尾插入时, 出队直至保证slope(k, l) < slope(j, k)
    在维护队头时, 出队直至slope(i, j) > i

  • 相关阅读:
    redis的两种安装方法
    http头部信息
    软件测试技术知识
    github使用
    3 python之基础概要
    2 Python之编程语言介绍及变量
    1 Python入门及计算机硬件知识
    Linux常用命令
    CMDB小练习
    CMDB和运维自动化
  • 原文地址:https://www.cnblogs.com/ZeonfaiHo/p/6402848.html
Copyright © 2020-2023  润新知