poj2082棧的簡單應用

2021-07-05 08:09:47 字數 961 閱讀 6128

/*

*poj2082

*題目描述的真複雜 ,其實題意很簡單

*就是輸入每個長方形的寬度和高度 可以切割的最大的長方形的面積

*解題思路就是維護乙個高度遞增的乙個棧,

*輸入的高度大於等於棧頂元素的高度就將其壓入棧中

*輸入的高度小於棧頂元素的高度就將其出棧 直到棧空或者棧頂元素的高度小於輸入元素的高度

*在棧頂元素出棧的時候 不斷的計算以當前出棧元素的高度 來切割的話能得到的最大面積

*程式中記錄了乙個totalw來記錄按當前出棧元素的高度來切割最大面積 ,最大的可能的寬度

*因為整個棧元素的高度是單調增加的,所以在棧頂元素出棧後totalw累加棧頂元素的寬度

*因為之後出棧的元素的高度肯定是小於此次出棧元素的高度的,所以按以後出棧的元素來切割的話

*可以累加這次出棧元素的高度 ,從而計算出按當前出棧元素的高度來切割計算最大面積 。

*然後與最大面積比較 從而更新最大面積

*/#include

#include

#include

using

namespace

std;

typedef

struct

node;

int main(int argc,char **argv)

else

//棧不為空的時候

totalw+=rectangle[i].w;//累加已經出棧的長方形的高度(這些長方形必定高度大於i的高度 而且和i相鄰)

rectangle[i].w=totalw;

s.push(rectangle[i]);//將i號長方形壓入棧中 } }

}cursize=0;

totalw=0;

while(!s.empty())

cout

}return

0;}

棧的簡單應用

一 棧的簡單應用 1 數制轉換。2 括號匹配。3 逆波蘭表示式的計算。二 void hextran datatype x,datatype k 任意進製轉換 while stackempty s datatype bracketsmatch char p 括號匹配 if p stackpop s 反...

棧的簡單應用

十進位制數n到banse進製的轉換 遞迴版 void convert stack s,int64 t n,int base if 0 在尚有餘數之前,不斷 s.push digit n base convert s,n base base 通過遞迴得到最有最高位 迭代版 void convert2 ...

棧及其簡單應用

棧是一種特殊的線性表 是一種先進後出表 filo 只有棧頂元素才能被操作 特殊 棧具有特殊的儲存訪問結構 棧的操作 入棧 向棧中儲存資料元素 push 出棧 從棧中取出元素 pop 棧頂指標 top 用來指向最後乙個入棧元素 棧滿 上溢 不可入棧 top size 1 入棧操作 top top 1 ...