zoukankan      html  css  js  c++  java
  • P4147 玉蟾宫 题解

    CSDN同步

    原题链接

    简要题意:

    求最大 (0) 矩阵。(将字符转化为数字)

    本题是模板题,可以用来爆踩。???

    悬线法 来了!

    其中绿色是 (0),红色是 (1).

    下面以这个图为例讲一下算法流程。

    我们首先求出,以每个格子为最下面,往上堆积的最长的 (0) 条。

    则所有格子的值为:

    0 0 1 0
    0 1 2 1
    1 2 3 2
    0 0 0 0
    

    下面,对每一行,求以这一行为底的最大矩阵。

    第一行:只能以 (a_{1,3}) 为底,无法往左右扩展,此时答案为 (1 imes (3-3+1) = 1).

    第二行:对于 (a_{2,2}),可以往左扩展至 (2,2),往右扩展至 (2,4),此时答案为 (1 imes (4-2+1) = 3).

    (a_{4,2}) 同理。

    (a_{3,3}) 往上可以扩展 (1) 格,左右不得扩展,因此答案为 (2 imes (3-3+1) = 2).

    所以整个第二行的答案为 (max(3,2,3) = 3).

    第三行:

    对于 (a_{3,1}) ,左右扩展 (4) 格,往上只有 (1) 格,答案为 (4).

    对于 (a_{3,2}) ,左右扩展 (3) 格,往上只有 (2) 格,答案为 (6).

    (a_{3,3})(a_{4,4}) 同。

    所以第三行的答案为 (max(4,6,6,6) = 6).

    第四行没有绿格,所以答案为 (0).

    综上,答案为 (max(1,3,6,0) = 6).

    大家应该都懂了吧!

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1e3+1;
    
    inline int read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
    	int x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
    
    int n,m,a[N][N],h[N][N];
    int l[N][N],r[N][N],ans=0;
    
    int main(){
    	n=read(),m=read();
    	for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++) {
    		char c; cin>>c;
    		a[i][j]=(c=='F')?0:1;
    //		l[i][j]=r[i][j]=j; h[i][j]=1;
    	} for(int j=1;j<=m;j++) r[0][j]=m+1;
    	for(int i=1;i<=n;i++) {
    		for(int j=1;j<=m;j++) h[i][j]=(!a[i][j])?(h[i-1][j]+1):0; //往上扩展
    		int t=0;
    		for(int j=1;j<=m;j++)
    			if(!a[i][j]) l[i][j]=max(l[i-1][j],t);
    			else l[i][j]=0,t=j; //往左扩展
    		t=m+1; for(int j=m;j;j--)
    			if(!a[i][j]) r[i][j]=min(r[i-1][j],t);
    			else r[i][j]=m+1,t=j; //往右扩展
    		for(int j=1;j<=m;j++) ans=max(ans,(r[i][j]-l[i][j]-1)*h[i][j]);		
    	} printf("%d
    ",ans*3); //别忘了*3
    	return 0;
    }
    
    
  • 相关阅读:
    Java数组的使用
    Java的栈堆以及数组两种不同类型的定义
    Java数组声明的创建
    JAVA递归
    Java可变参数
    Java方法(类--------对象--------方法)
    html块元素和内联元素的区别
    HTML基础介绍
    CSS网页美化元素属性介绍
    ArrayList类的remove(Object o)方法简述
  • 原文地址:https://www.cnblogs.com/bifanwen/p/12559544.html
Copyright © 2011-2022 走看看