zoukankan      html  css  js  c++  java
  • 计算最大矩形面积,POJ(2082)

    题目链接: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
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    存储器
    存储器
    存储器
    计算机组成原理目录
    锁原理
    锁原理
    并发编程
    Java 算法
    Java 数据结构
    Java数据结构
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5483542.html
Copyright © 2011-2022 走看看