POJ2082(简单堆栈)

来源:互联网 发布:Mac玩钢铁雄心4 编辑:程序博客网 时间:2024/05/29 17:51

poj2082

堆栈是一种先进后出的数据结构。他有一个栈顶指针,通过对对战的入栈和出栈的控制,可以改变一个序列的顺序。

这道题很不易发现的是在输入的n组矩形数据之中要找出组成的最大面积可以把长度大切割。

代码之中注意ans的重大作用。

#include<cstdio>#include<iostream>#include<stack>using namespace std;struct rec{    int w;    int h;}data;int main(){    int n,ans,i,lasth,totalw,curarea;    while(scanf("%d",&n) && n != -1){        ans = 0;        stack<rec>s;        lasth = 0;        for(i = 0;i < n; i++){            scanf("%d%d",&data.w,&data.h);            if(data.h >= lasth)                s.push(data);            else {                totalw = 0;                curarea = 0;                while(!s.empty() && s.top().h > data.h){                    totalw += s.top().w;                    curarea = totalw * s.top().h;                    if(curarea > ans)                        ans = curarea;                    s.pop();                }                totalw += data.w;                data.w = totalw;                s.push(data);            }            lasth = data.h;        }            totalw = 0;            curarea = 0;            while(!s.empty()){                totalw += s.top().w;                curarea = totalw * s.top().h;                if(curarea > ans)                    ans = curarea;                s.pop();            }            printf("%d\n",ans);        }    return 0;}


0 0
原创粉丝点击