반응형
https://www.acmicpc.net/problem/1915
문제 해결 알고리즘
다이나믹 프로그래밍으로 주변에 있는 사각형들 중 가장 작은 크기의 정사각형 크기에서 + 1 해준다.
갱신해줄 때마다 최댓값도 갱신해준다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
int n, m, result = 0;
int dp[1001][1001];
void find_max_square(){
for(int k=1;k<min(n,m);k++){
for(int i=0;i<n-k;i++){
for(int j=0;j<m-k;j++){
if(dp[i][j]) {
dp[i][j] = min(dp[i+1][j], min(dp[i+1][j+1], dp[i][j+1])) + 1;
result = max(result, dp[i][j]);
}
}
}
}
}
int main(){
cin >> n >> m;
for(int i=0;i<n;i++){
string str; cin >> str;
for(int j=0;j<str.size();j++){
dp[i][j] = str[j] - '0';
if(dp[i][j] == 1) result = 1;
}
}
find_max_square();
cout << result * result;
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[DP] BOJ 11062 카드 게임 (C++) (0) | 2022.10.02 |
---|---|
[DP] BOJ 5582 공통 부분 문자열 (C++) (0) | 2022.09.30 |
[브루트 포스, 백 트래킹] BOJ 14500 테트로미노 (C++) (1) | 2022.09.24 |
[세그먼트 트리] BOJ 2268 수들의 합 7 (C++) (0) | 2022.09.21 |
[BFS] BOJ 2573 빙산 (C++) (0) | 2022.09.18 |