首页 > 其他 > 详细

斜率优化 & 凸包

时间:2020-05-07 22:17:48      阅读:59      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 300010;
int n, s;
typedef long long LL;
LL t[N], c[N], f[N], q[N];

int main()
{
    cin >> n >> s;
    for(int i = 1; i <= n; i ++)
    {
        cin >> t[i] >> c[i];
        t[i] += t[i - 1];
        c[i] += c[i - 1];
    }
    
    int hh = 0, tt = 0;
    
    for(int i = 1;i <= n;i ++)
    {
        int l = hh, r = tt;
        while(l < r)
        {
            int mid = l + r >> 1;
            if((f[q[mid + 1]] - f[q[mid]]) > (t[i] + s) * (c[q[mid + 1]] - c[q[mid]])) r = mid;
            else l = mid + 1;
        }
        
        int j = q[r] ;
        f[i] = f[j] - (t[i] + s) * c[j] + t[i] * c[i] + s * c[n];
        while(hh < tt && (double)(f[q[tt]] - f[q[tt - 1]]) * (c[i] - c[q[tt]]) >= (double)(f[i] - f[q[tt]]) * (c[q[tt]] - c[q[tt - 1]])) tt --;
        q[++tt] = i;
    }
    
    cout<<f[n]<<endl;
    
}

 技术分享图片

技术分享图片

 

斜率优化 & 凸包

原文:https://www.cnblogs.com/longxue1991/p/12845640.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!