TYVJ 1939 「Poetize4」玉蟾宫
2016-07-03 22:43
204 查看
背景
有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
【题目分析】
单调栈模板题目。用递推计算最长延伸高度。
【代码】
有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。
【题目分析】
单调栈模板题目。用递推计算最长延伸高度。
【代码】
#include <cstdio> #include <iostream> using namespace std; const int MAX_N = 100005; int deep[1001], stack[1001], A[1001], n,m; int map[1001][1001]; int h[1001][1001]; char ch; int main() { int out=0; scanf("%d%d",&m,&n); for (int i=1;i<=m;++i) for (int j=1;j<=n;++j) { cin>>ch; if (ch=='F') map[i][j]=1; } for (int i=1;i<=m;++i) for (int j=1;j<=n;++j) if (map[i][j]) h[i][j]=h[i-1][j]+1; for (int j=1;j<=m;++j) { for (int i = 1; i <= n; i++) A[i]=h[j][i]; A[n+1] =0;n++; stack[0] = 0; int ans = 0; deep[0] = 0; int top = 1; for (int i = 1; i <= n; i++) { int depth = i; while (A[i] < stack[top-1]) { int tmp = (int)(i - deep[top-1]) * (int)stack[top-1]; if (tmp > ans) ans = tmp; depth = deep[top-1]; top --; } if (A[i] > stack[top-1]) { stack[top] = A[i]; deep[top] = depth; top ++; } } out=max(ans,out); n--; } printf("%d\n",out*3); }
相关文章推荐
- C++基于栈实现铁轨问题
- 浅析C语言中堆和栈的区别
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- C#使用Object类实现栈的方法详解
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- JavaScript数组的栈方法与队列方法详解
- JavaScript数据结构与算法之栈与队列
- JavaScipt中栈的实现方法
- Java中堆和栈的区别详解