bzoj1096: [ZJOI2007]仓库建设

Posted AKCqhzdy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1096: [ZJOI2007]仓库建设相关的知识,希望对你有一定的参考价值。

复习斜率优化。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
int list[1010000];
LL f[1010000],d[1010000],sp[1010000];
LL s[1010000],p[1010000],c[1010000];
double X(int j)
{
    return double(f[j]+d[j]);
}
double Y(int j)
{
    return double(sp[j]);
}
double slope(int j1,int j2)
{
    return (X(j1)-X(j2))/(Y(j1)-Y(j2));
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%lld%lld%lld",&s[i],&p[i],&c[i]);
    d[0]=0;sp[0]=0;
    for(int i=1;i<=n;i++)
    {
        sp[i]=sp[i-1]+p[i];
        d[i]=d[i-1]+p[i]*s[i];
    }
    int head=1,tail=1;
    list[1]=0;
    for(int i=1;i<=n;i++)
    {
        while(head<tail&&slope(list[head],list[head+1])<double(s[i]))head++;
        int j=list[head];
        f[i]=f[j]+c[i]+(sp[i-1]-sp[j])*s[i]-(d[i-1]-d[j]);
        while(head<tail&&slope(list[tail-1],list[tail])>slope(list[tail],i))tail--;
        list[++tail]=i;
    }
    printf("%lld\n",f[n]);
    return 0;
}

 

以上是关于bzoj1096: [ZJOI2007]仓库建设的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1096-[ZJOI2007]仓库建设

BZOJ 1096 [ZJOI2007]仓库建设 (斜率优化)

bzoj1096: [ZJOI2007]仓库建设

bzoj1096[ZJOI2007]仓库建设 斜率优化dp

bzoj1096 [ZJOI2007]仓库建设

BZOJ1096: [ZJOI2007]仓库建设