李泽钜,李洛克的青春全力忍传,战網无法安装,战胜困难的名言
抽烟记(其四酒醒伶仃天涯路)
一浪一浪来自海天的拥抱
是你终于累了跌倒的白骨
相关热词搜索:李泽钜,李洛克的青春全力忍传,戰网无法安装,战胜困难的名言
从山顶上到山底下沿着一条直线種植了n棵老树当地的政府决定把他们砍下来。为了不浪费任何一棵木材树被砍倒后要运送到锯木厂。
木材只能朝山下运山脚下有一個锯木厂。另外两个锯木厂将新修建在山路上你必须决定在哪里修建这两个锯木厂,使得运输的费用总和最小假定运输每公斤木材每米需要一分钱。
你的任务是编写一个程序从输入文件中读入树的个数和他们的重量与位置,计算最小运输费用
输入的第一行为一个正整数(2≤n≤20000)。树从山顶到山脚按照i棵树的重量(公斤为单位)和i+1棵树之间的距离n棵树到山腳的锯木厂的距离。保证所有树运到山脚的锯木厂所需要的费用小于
大佬们说这道题是斜率优化入门题所以蒟蒻来试试,没想到一试就昰一下午o(╥﹏╥)o。
好了说下想法,看到这题其实很直接就想到设f[i]表示把锯木厂建在第i棵树的位置的最小费用。
然后就是朴素的状态轉移方程了:
sum表示所有树一开始全部运送的山脚下的花费d[i]表示距离的后缀和(因为我们是从上运到下面),s[i]表示树的重量的前缀和那么在i,j處修了工厂后花费就变成了总花费j厂运到山脚的额外花费i厂运到山脚下的额外花费
j前面的木材运到jj厂,然后减去这些木材运到山脚的花费再把i厂,再减去它们到山脚的花费
i的增加而变小的,所以我们根据斜率维护一个上凸壳因为是单调的,所以用一个队列就可以了
嘫后根据我调了一下午,最终不得不求助于神犇晗神才A掉此题的前史之鉴告诉大家,式子一定要自己推不要看了一遍,觉得会就直接开始写代码,要把式子写在纸上会帮很大忙!