zoukankan      html  css  js  c++  java
  • [Apio2010]特别行动队

    1911: [Apio2010]特别行动队

    Time Limit: 4 Sec  Memory Limit: 64 MB
    [Submit][Status][Discuss]

    Description

    Input

    Output

    Sample Input

    4
    -1 10 -20
    2 2 3 4

    Sample Output

    9

    HINT

    斜率优化的式子搞出来之后,a是负的,所以要么不除过去,要么除过去变号

     
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #define N 1000001 
    using namespace std;
    int q[N],head,tail;
    long long dp[N],sum[N],a,b,c,n;
    void read(long long &x)
    {
        x=0; int f=1; char c=getchar();
        while(!isdigit(c)) { if(c=='-') f=-1; c=getchar();}
        while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }
        x*=f;
    }
    long long up(int k,int j)
    {
        return dp[j]-dp[k]+a*(sum[j]*sum[j]-sum[k]*sum[k])+b*(sum[k]-sum[j]);
    }
    long long down(int k,int j)
    {
        return 2*(sum[j]-sum[k]);
    }
    int main()
    {
        read(n);
        read(a); read(b); read(c);
        for(int i=1;i<=n;i++) 
        {
            read(sum[i]);
            sum[i]+=sum[i-1];
        }
        int j;
        for(int i=1;i<=n;i++)
        {
            while(head<tail && up(q[head],q[head+1])>=down(q[head],q[head+1])*sum[i]*a) head++;
            j=q[head];
            dp[i]=dp[j]+a*(sum[i]-sum[j])*(sum[i]-sum[j])+b*(sum[i]-sum[j])+c;
            while(head<tail && up(q[tail-1],q[tail])*down(q[tail],i)<=up(q[tail],i)*down(q[tail-1],q[tail])) tail--;
            q[++tail]=i;
        }
        printf("%lld",dp[n]);
    }
  • 相关阅读:
    Spring自定义注解简单使用四步走
    关于Mybaits映射一点心得
    设置UIButton文字大小颜色不同
    AFNetworking上传文件
    解决UITableView头部空白
    iOS获取文件和文件夹大小
    编译ffmpeg(iOS)
    让MySql支持Emoji表情
    MySQL重置密码(OSX)
    iOS多线程总结
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/7481644.html
Copyright © 2011-2022 走看看