참고한 블로그
그림을 보니까 이해가 됐다. 

입력받은 양의 공간만 사용해서 dp를 한게 아니라 필요에 따라 좀더 늘려서 할 수 있다는 걸 보여준 문제
ex. i,j == 1부터 입력받고 탐색은 i-1로 0부터 탐색한다. ==> 여기엔 자동으로 값이 0이 저장된 걸 이용

#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <limits.h>
#include <queue>
#include <stack>
int min3(int a,int b,int c){
       a = (a < b ? a : b);
       return (a < c ? a : c);
}
using namespace std;
int tb1[100001];
int tb2[1001][1001];
int che[100001];
int che2[1001][1001];
bool doo[100001];
int n, m;
int main(void)
{
       cin >> n >> m;
       for (int i = 1; i <= n; ++i) {
              for (int j = 1; j <= m; ++j) {
                     scanf_s("%1d", &tb2[i][j]);
              }
       }
       int ans = 0;
       for (int i = 1; i <= n; ++i) {
              for (int j = 1; j <= m; ++j) {
                     if (tb2[i][j] == 1) {
                           che2[i][j] = min3(che2[i - 1][j - 1], che2[i - 1][j], che2[i][j - 1]) + 1;
                           ans = (ans < che2[i][j] ? che2[i][j] : ans);
                     }
              }
       }
       cout << ans*ans << endl;
       
       return 0;
}


'알고리즘' 카테고리의 다른 글

[DP] 백준 5557 1학년  (0) 2018.04.29
[DP] 백준 10164 격자상의경로  (0) 2018.04.29
[DP] 백준 9461 파도반 수열  (0) 2018.04.29
[DP] 백준 2098 외판원순회  (0) 2018.04.29
[DP] 백준 4811 알약  (0) 2018.04.29

+ Recent posts