POJ 2082 堆栈
来源:互联网 发布:爱普生打印软件下载 编辑:程序博客网 时间:2024/06/06 01:59
Terrible Sets
Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 2882 Accepted: 1479
Description
Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all real numbers. wi, hi for i = 1 . . . n are some elements in N, and w0 = 0.
Define set B = {< x, y > | x, y ∈ R and there exists an index i > 0 such that 0 <= y <= hi ,∑0<=j<=i-1wj <= x <= ∑0<=j<=iwj}
Again, define set S = {A| A = WH for some W , H ∈ R+ and there exists x0, y0 in N such that the set T = { < x , y > | x, y ∈ R and x0 <= x <= x0 +W and y0 <= y <= y0 + H} is contained in set B}.
Your mission now. What is Max(S)?
Wow, it looks like a terrible problem. Problems that appear to be terrible are sometimes actually easy.
But for this one, believe me, it's difficult.
Define set B = {< x, y > | x, y ∈ R and there exists an index i > 0 such that 0 <= y <= hi ,∑0<=j<=i-1wj <= x <= ∑0<=j<=iwj}
Again, define set S = {A| A = WH for some W , H ∈ R+ and there exists x0, y0 in N such that the set T = { < x , y > | x, y ∈ R and x0 <= x <= x0 +W and y0 <= y <= y0 + H} is contained in set B}.
Your mission now. What is Max(S)?
Wow, it looks like a terrible problem. Problems that appear to be terrible are sometimes actually easy.
But for this one, believe me, it's difficult.
Input
The input consists of several test cases. For each case, n is given in a single line, and then followed by n lines, each containing wi and hi separated by a single space. The last line of the input is an single integer -1, indicating the end of input. You may assume that 1 <= n <= 50000 and w1h1+w2h2+...+wnhn < 109.
Output
Simply output Max(S) in a single line for each case.
Sample Input
31 23 41 233 41 23 4-1
Sample Output
1214
题目大意:
给你诺干个沿着x轴排列的矩形 ,给长和宽, 要你求出这些矩形能组成最大矩形的面积
不懂题意可以看 网址:http://www.cnblogs.com/hxsyl/archive/2012/08/16/2643015.html
这个博客说的很详细;
解题方法:
先调解矩形的高是递增的,为什么要递增 目的是这样才能方便找到最大面积 具体的含有DP 思想
其次,计算最大面积即可;
最后要说明的是主要利用堆栈进行处理 也是 为什么上面要递增 其次要主要的是ans lasth 放置的位置
源代码:
#include<iostream>#include<stack>using namespace std;struct ss{ int w, h;}data;stack<ss>s;int main(){ int n, i ,ans, curarea, lasth, totalw; while(cin>>n , n!= -1) { ans = 0; lasth = 0; for(i = 0; i < n; i++) { cin>>data.w>>data.h; if(data.h >= lasth) { s.push(data); } else { totalw = 0; curarea = 0; while(!s.empty() && data.h < s.top().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(); } cout<<ans<<endl; } return 0;}
0 0
- POJ 2082 堆栈
- POJ 3250 单调堆栈
- poj-3159,SPFA+堆栈
- POJ 1036 Rails 模拟堆栈
- POJ-1363 Rails-堆栈入门
- UVA 514 - Rails && POJ 1363 (堆栈模拟)
- poj 1208 Web Navigation(堆栈操作)
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- 堆栈
- java_集合体系之总体目录——00
- Mac系统常用快捷键(mac系统截图)
- CF223B题Sereja and Stairs
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- mac os X下的updatedb
- POJ 2082 堆栈
- Android里透明的ListView
- 修改Tomcat 6 默认的ROOT
- Nginx作为代理服务器如何响应后端服务器的status code
- 【深入Java虚拟机】之二:Class类文件结构
- android layout maxHeight
- C++面试题整理(一)
- 常用JS总结2-学习笔记
- jQuery 入门教程(4): Events