zoukankan      html  css  js  c++  java
  • BZOJ1113 海报PLA

    好像是很古老的题?现在BZOJ上找不到该题,所以没有提交。

    1113: [Poi2008]海报PLA

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 810  Solved: 507
    [Submit][Status][Discuss]

    Description

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

    (SilverN附注:矩形外不能贴海报)

    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

    根据神秘提示 可以用单调栈来处理。

    先假设每个矩形都用一张海报覆盖。从左到右遍历,对于一个矩形,如果左边有和它高度相等的矩形(且两个矩形之间没有更低的),那么可以用一大张海报覆盖这两个矩形和它们之间的部分(见上图),则总海报数-- 。

    用单调栈维护“左边第一个比当前矩形低的矩形”,如果该矩形高度和当前矩形相同,那么总海报数--

    代码如下:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 int n;
     6 int st[2000];
     7 int t=0;
     8 int ans;
     9 int main(){
    10     scanf("%d",&n);
    11     ans=n;//最差情况需要n张海报 
    12     int i,j;
    13     int x,y;
    14     scanf("%d%d",&x,&y);
    15     st[++t]=y;
    16     for(i=2;i<=n;i++){
    17         scanf("%d%d",&x,&y);
    18         while(t>0 && st[t]>y)t--;
    19         if(st[t]==y)ans--;
    20         st[++t]=y;
    21     }
    22     printf("%d
    ",ans);
    23     return 0;
    24 
    25 }
  • 相关阅读:
    springboot之redis的应用
    redis外部访问
    Calendar时间操作
    zookeeper安装
    springboot的interceptor(拦截器)的应用
    springboot中filter的用法
    IIS无法启动,应用程序池自动关闭
    HTTP 错误 403.14
    【转】JavaScript => TypeScript 入门
    angular2使用ng g component navbar创建组件报错
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5550631.html
Copyright © 2011-2022 走看看