hdu1505(最大子矩阵)
来源:互联网 发布:软件著作权申请网址 编辑:程序博客网 时间:2024/06/06 06:55
本题就是要求最大子矩阵--
思路: 1.针对于dp数组中代表的每一个点,我们为其设置它的高度h。
当这个点是障碍时,我们把它的高度设置为0,否则它的高度是垂直方向的上一个点加1。
2.我们设法求出该点向左和向右能够延伸的最大距离。然后用right - left + 1就等于边的长度。
3.我们用高乘以边得到面积,通过判断后找到最大的面积,就可以得到答案了。
如何表示高度: 在输入的时候就行判断,然后对dp数组进行初始化。如果是F,则h[i][j] = h[i-1][j] + 1,否则h[i][j] =0。
如何表示宽度: 我们按行进行遍历,对于第i行的点,分别为它们设置下标对应的l,r数组进行表示left,right。
以找左边最大延伸距离为例:当向左边延伸的时候,我们判断该点的左边的点的高度,如果左边点的高度大于等于该点的高度,说明这个点是可以延伸到的,所以我们继续向该点的下一个点进行延 伸。
for(int j = 1; j <= N; j++){
while(h[i][l[j]-1] >= h[i][j]){
l[j] = l[l[j]-1];
}
}
借用的代码:
#include<stdio.h>#include<string.h>/*25 6R F F F F FF F F F F FR R R F F FF F F F F FF F F F F F5 5R R R R RR R R R RR R R R RR R R R RR R R R R*/int h[1100][1100],l[1100],r[1100];int main(){ int K,M,N; char ch[4]; scanf("%d",&K); while(K--) { memset(h,0,sizeof(h)); memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); scanf("%d%d",&M,&N); for(int i = 1; i <= M; i++) { for(int j = 1; j <= N; j++) { scanf("%s",ch); if(ch[0] == 'F') h[i][j] = h[i-1][j] + 1; else h[i][j] = 0; } } __int64 MaxArea = -0xffffff0; for(int i = 1; i <= M; i++) { for(int j = 1; j <= N; j++) l[j] = r[j] = j; l[0] = 1; r[N+1] = N; h[i][0] = -1; h[i][N+1] = -1; for(int j = 1; j <= N; j++) { //如果收它左边的点的高度大于等于它,就将它们对于的左值赋值为左边那个点,这样可以保证合适的最左点 while(h[i][l[j]-1] >= h[i][j]){ l[j] = l[l[j]-1]; } } //寻找最右点 for(int j = N; j >= 1; j--) { while(h[i][r[j]+1] >= h[i][j]) r[j] = r[r[j]+1]; } for(int j = 1; j <= N; j++) { if(h[i][j]*(r[j]-l[j]+1) > MaxArea) MaxArea = h[i][j]*(r[j]-l[j]+1); } } printf("%I64d\n",MaxArea*3); } return 0;}
阅读全文
0 0
- hdu1505(最大子矩阵)
- hdu1505 City Game (最大子矩阵)
- hdu1505 City game(最大子矩阵)
- HDU2870----DP_最大子矩阵系列(同HDU1505,1506)
- hdu1505最大子矩阵(输入超级坑)
- HDU1505 最大全零矩阵
- DP hdu1505 找最大矩阵
- 【BZOJ3039】玉蟾宫/【HDU1505】【POJ1964】City Game 最大01子矩阵
- hdu1505 City Game (最大子矩形)
- hdu1505 City Game二维01矩阵求最大矩形周长
- HDU1505、2870,2830(最大的10矩阵面积问题)
- ACM学习感悟——HDU1505 最大0矩阵
- 最大子矩阵问题
- 最大子矩阵模板
- 最大子矩阵问题
- 最大子矩阵问题
- 最大01 子矩阵
- 最大子矩阵问题
- 读
- [C]求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12
- css
- 【MD5】MD5校验文件的正确性
- spring.profiles.active 针对多种启动环境的spring配置
- hdu1505(最大子矩阵)
- TensorFlow学习笔记02:TensorFlow基本简介
- python 进程的理解
- Switch用String做参数
- Reflection2017.12.4
- A Plug for UNIX POJ
- 用java来求出n以内的质数的优算写法
- mui下a标签href失效问题,以及a标签的其他小坑。
- 界面平移动画