zoukankan      html  css  js  c++  java
  • 海报PLA (HYSBZ

    N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们.

    Input

    第一行给出数字N,代表有N个矩形.N在[1,250000] 下面N行,每行给出矩形的长与宽.其值在[1,1000000000]2 1/2 Postering

    Output

    最少数量的海报数.

     
    Sample Input
    5
    1 2
    1 3
    2 2
    2 5
    1 4 

    Sample Output

    4

                                 


    先解释下题意,题目说的不是很清楚

    看上面两幅图,是样例的排列方式,其中可以发现有一个隐藏条件,空白不能被覆盖(我刚开始看到题目以为一大张糊上去就可以了……)

    当遇到一低一高时,必须要用两张,但如果后面有一个和第一张高度相等的,三张海报,两张就覆盖了----省了一张

    但如果一高一低,无论如何都省不了,再于后面就无关了

    因此:

    我们用一个单调栈,宽度不管,就看高度

    小的入栈,大的不管,如果相等,可省一张

    代码如下:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[250001],stk[250001],top,n,k;
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
        {
            int d,h;
            scanf("%d%d",&d,&h);
            while(top>0 && h<=stk[top]){
                if(h==stk[top]) k++;
                top--;
            }
            stk[++top]=h;
        }
        printf("%d",n-k);
        return 0;
    }
    从0到1很难,但从1到100很容易
  • 相关阅读:
    KVM虚拟化网卡管理
    KVM虚拟化存储管理
    OpenStack简介
    KVM虚拟机管理
    Jenkins持续集成
    Python函数
    Python文件处理
    Python语句
    Python数据类型的用法
    微信服务号开发小项目总结
  • 原文地址:https://www.cnblogs.com/qseer/p/9402442.html
Copyright © 2011-2022 走看看