zoukankan      html  css  js  c++  java
  • BZOJ1233: [Usaco2009Open]干草堆tower

    Description

    奶牛们讨厌黑暗。 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 。一共有N大包的干草(1<=N<=100000)(从1到N编号)依靠传送带连续的传输进牛棚来。第i包干草有一个 宽度W_i(1<=w_i<=10000)。所有的干草包的厚度和高度都为1. Bessie必须利用所有N包干草来建立起干草堆,并且按照他们进牛棚的顺序摆放。她可以相放多少包就放 多少包来建立起tower的地基(当然是紧紧的放在一行中)。接下来他可以放置下一个草包放在之前一级 的上方来建立新的一级。注意:每一级不能比下面的一级宽。她持续的这么放置,直到所有的草包都被安 置完成。她必须按顺序堆放,按照草包进入牛棚的顺序。说得更清楚一些:一旦她将一个草包放在第二级 ,她不能将接下来的草包放在地基上。 Bessie的目标是建立起最高的草包堆。

    Input

    第1行:一个单一的整数N。 第2~N+1行:一个单一的整数:W_i。

    Output

    第一行:一个单一的整数,表示Bessie可以建立的草包堆的最高高度。

    Sample Input

    3
    1
    2
    3

    Sample Output

    2
    输出说明:
    前两个(宽度为1和2的)放在底层,总宽度为3,在第二层放置宽度为3的。
    +----------+
    | 3 |
    +---+------+
    | 1 | 2 |
    +---+------+
     
    我的智商完全不兼容单调队列的赶脚

    设f[i]表示i~n组草堆底下最少的宽度,g[i]表示这个草堆的高度,sum[i]表示前缀和 

    f[i]=min(sum[j1]sum[i1])(f[j]<=sum[j1]sum[i1]然后n2随便肏

    化下柿子,sum[i1]<=sum[j1]f[j],证一下单调性
    然后这道题很神。。。他是有限制的单调方程
    又因为队头一定合法,我们就直接干到最小值了
    代码如下:
    //MT_LI
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll f[210000],g[210000],s[210000],a[210000];//[i]表示i~n组草堆底下最少的宽度,g[i]表示这个草堆的高度,sum[i]表示前缀和 
    // f[i]=min(sum[j-1]-sum[i-1])(f[j]<=sum[j-1]-sum[i-1])
    int n;
    int list[210000];
    int head,tail;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%lld",&a[i]),s[i]=s[i-1]+a[i];
        head=1,tail=1;list[1]=n+1;
        for(int i=n;i>=1;i--)
        {
            while(head<tail&&s[list[head+1]-1]-s[i-1]>=f[list[head+1]])head++;
            int j=list[head];
            g[i]=g[j]+1;f[i]=s[j-1]-s[i-1];
            while(head<=tail&&s[list[tail]-1]-f[list[tail]]<=s[i-1]-f[i])tail--;
            list[++tail]=i;
        }
        printf("%lld
    ",g[1]);
        return 0;
    }
    The deepest love I think,later than apart,I will live as you like
  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/MT-LI/p/9649882.html
Copyright © 2011-2022 走看看