日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷P4147玉某宫(最大矩阵好题)

發(fā)布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P4147玉某宫(最大矩阵好题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

這片土地被分成N*M個格子,每個格子里寫著'R'或者'F',R代表這塊土地被賜予了rainbow,F代表這塊土地被賜予了freda。

現(xiàn)在freda要在這里賣萌。。。它要找一塊矩形土地,要求這片土地都標(biāo)著'F'并且面積最大。

但是rainbow和freda的OI水平都弱爆了,找不出這塊土地,而藍兔也想看freda賣萌(她顯然是不會編程的……),所以它們決定,如果你找到的土地面積為S,它們每人給你S兩銀子。

輸入輸出格式

輸入格式:

第一行兩個整數(shù)N,M,表示矩形土地有N行M列。

接下來N行,每行M個用空格隔開的字符'F'或'R',描述了矩形土地。

輸出格式:

輸出一個整數(shù),表示你能得到多少銀子,即(3*最大'F'矩形土地面積)的值。

輸入輸出樣例

輸入樣例#1:

5 6 R F F F F F F F F F F F R R R F F F F F F F F F F F F F F F

輸出樣例#1:

45

\(Solution:\)

一道傻不拉幾的求最大矩形面積題qwq

首先處理一個 p 數(shù)組,表示向上可拓展多少高度,是 “ F ” 就從上面那個轉(zhuǎn)移過來,是 “ R ” 就等于 0 。然后枚舉每一行,對于每一行求一個最大矩形面積

重點來了,怎么求最大矩形面積?請聽下回分解

開一個棧,用來記錄單調(diào)上升的矩陣,接下來的矩陣如果高度大于 top ,就加進去;如果小于,就把棧彈到大于為止,即把棧中高于當(dāng)前矩陣的矩陣彈掉并處理一下,并且每一次彈棧時都記錄一下答案。

如果有這么一個圖:

首先一直加,不需要記錄答案,直到第5個矩陣:

那么就把第3,4號矩陣彈掉,并相應(yīng)地把2號矩陣的寬度改掉,即改成這種樣子:

在過程中開一個指針leng,表示你彈掉的矩陣的總長度,在每彈一個時計算一下答案:\(leng * l[top].hi\) 。比如彈第三個時:

此時 leng=2 ,\(l[top].hi\) 為第三個矩陣的高度,計算的是藍色區(qū)域的面積。

最后把第4號的寬度也加進去,所以棧中有兩個元素,第一號寬度為 1 ,第二個為 4 。

跑完時一定要記得把棧清空,彈棧的程序一樣,也要計算答案。

具體請配合代碼食用:

#include<bits/stdc++.h> using namespace std; inline int read(){int f=1,w=0;char c=0;while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)) w=w*10+(c^48),c=getchar();return f*w; } struct line{int le,hi; }l[1010];//棧 int T,n,m,p[1010][1010],s[1010],ans; int check(int q){int tp=1,res=p[q][1];l[1].hi=res,l[1].le=1;for(int i=2;i<=m;i++){if(p[q][i]>=l[tp].hi){l[++tp].le=1;l[tp].hi=p[q][i];}//高度大于,直接加棧else{int leng=0;while(l[tp].hi>p[q][i]){leng+=l[tp].le;res=max(res,leng*l[tp].hi);//彈的時候記錄一下答案tp--;}l[++tp].le=leng+1;l[tp].hi=p[q][i];//入棧}}int leng=0;while(tp){leng+=l[tp].le;res=max(res,leng*l[tp].hi);tp--;}//彈棧并計算return res; } int main(){ans=0;n=read(),m=read();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char c;cin>>c;if(c=='F') p[i][j]=p[i-1][j]+1;else p[i][j]=0;}//預(yù)處理P數(shù)組for(int i=1;i<=n;i++)//枚舉行號ans=max(ans,check(i));printf("%d\n",ans*3);return 0; }

就醬qwq

轉(zhuǎn)載于:https://www.cnblogs.com/ajy-shi-cj-zui-cai/p/10386695.html

總結(jié)

以上是生活随笔為你收集整理的洛谷P4147玉某宫(最大矩阵好题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。