码迷,mamicode.com
首页 > 其他好文 > 详细

计算最大矩形面积,POJ(2082)

时间:2016-05-11 22:04:18      阅读:495      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://poj.org/problem?id=2082

把矩形按照高度一次递增的循序排列,当违反这一规则的时候,更新ans,用新的data替换之前的矩形。然后最后扫一遍。

技术分享

 

技术分享
#include <iostream>
#include <stack>
#include <cstdio>

using namespace std;

struct rec {
    int w;      ///
    int h;      ///
} data;

int main() {
    int n;
    while(scanf("%d",&n),n!=-1) {
        int ans=0;
        int totalw=0;   ///总宽
        int curarea=0;  ///当前面积
        stack<rec> s;   ///定义一个长方形的栈
        int lasth=0;    ///上一次进栈的矩形的高度
        for(int i=0; i<n; i++) {
            scanf("%d%d",&data.w,&data.h);
            if(data.h>=lasth) {
                s.push(data);       
            } else {
                ///更新ans
                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();    ///抛掉,最后用新的data代替
                }
                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;
}
View Code

 

计算最大矩形面积,POJ(2082)

标签:

原文地址:http://www.cnblogs.com/TreeDream/p/5483542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!