題目連結: https://tioj.ck.tp.edu.tw/problems/1063

# 內容

在一個 M x N 的區域內,散落了許多不同的障礙物,我們想要知道的是,在這個 M x N 的區域內,最大的矩形空地面積是多少?倘若我們用 0 與 1 表示這個區域內的空地狀況:0 代表這個子區域已被障礙物覆蓋,1 代表這個子區域仍為空地,我們假設每一個 0 或 1 所代表的子區域面積為 1,那麼在下面這個例子中(M=4,N=5),最大的矩形空地為陰影所覆蓋的區域,其面積為 8。
題目喔
在本題中,請依據輸入輸出的規定,針對輸入的地圖,輸出其最大的矩形空地面積。

# 思路

先算出從左到右有多少連續,再對每個數字往上尋找高,記得,再找高的途中如果有遇到比自己小的數字,數字要更新喔!!
畫了圖你就知道

# 程式碼

#include <bits/stdc++.h>
using namespace std;
int mp[201][201]={};
int m, n;
int main() {
    while(cin>>m>>n){
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                cin>>mp[i][j];
        for(int i =0;i<m;i++)
            for(int j =1;j<n;j++)
                if(mp[i][j])
                    mp[i][j]=mp[i][j-1]+1;
        int ans = 0;
        for(int i = 0;i<m;i++){
            for(int j =0;j<n;j++){
                int width = 1<<20;
                for(int h = 0;i-h>=0&&mp[i-h][j];h++){
                    width = min(width,mp[i-h][j]);
                    int area = width*(h+1);
                    ans = max(ans,area);
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay