3467洛咕

https://www.luogu.org/problemnew/solution/P3467
BZOJ1113[POI2008] 海报PLA

具体栗子在课件里
N个矩形楼房,排成一排. 现在希望用尽量少的矩形海报Cover住它们.
必有至少一栋楼房被完全覆盖
f[i]表示将第i幢房屋完全覆盖,并以该房屋的高度将广告向左延伸的最大距离
对称地求向右延伸的情况,就可以求出最大答案
f[i]=?
从左向右枚举第i幢房子,将其完全覆盖
即使第i-1幢房子的高度高于第i栋房子,无论高出多少,多余的高度在枚举到i之后都是无用的
为啥可以这么删去
如果ai-1 > ai,那么i右边的房子向左延伸时,如果没有被i挡住,则更不会被i-1挡住
删除操作可能连续发生
由i删除i左边的房屋
每删除一幢房屋就说明又能向左
扩展一段距离

#include<cstdio>

#include<iostream>
using namespace std;
int t,di,wi;
const int maxn=2500000;
int stack[maxn],ans,num;
int top;
int main()
{
    scanf("%d",&t);
    for(int i=1;i<=t;i++)
    {
        cin>>di>>wi;
        while(top>0&&stack[top]>=wi)
        {
            if(wi==stack[top]) num++;
            --top;//弹栈操作
        }
         stack[++top]=wi;
    }
    printf("%lld\n",t-num);
    return 0;
 } 

转载于:https://www.cnblogs.com/tbdemons/p/11296864.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值