티스토리 뷰
반응형
solved.ac 티어 : 골 5
https://www.acmicpc.net/problem/1915
dp로 된다는걸 알면 쉬운데 dp인걸 알아채기가 어렵다고 해서 골 5라고 한다.
바로 문제풀이를 설명하자면
dp [i][j]=(i, j) 번째 점을 포함하는 정사각형의 한 변의 최대 길이
이게 끝이다.
dp [i][j]를 구하려면 (i, j) 번째 점이 0일 때는 0이고 1일 때는 (i-1, j)==(i, j-1)==(i-1, j-1) 이면 셋 중 하나의 값+1이 dp [i][j]가 되고
아닐 떼 셋 중 가장 작은값+1을 해주면 된다.
이걸 이제 구현만 해주면 끝.
생각보다 간단하다.
import sys
input=sys.stdin.readline
sys.setrecursionlimit(10**9)
a,b=map(int,input().split())
l=[]
for i in range(a):
rty=list(input().strip())
for g in range(b):
rty[g]=int(rty[g])
l.append(rty)
dp=[[-1 for i in range(b+1)]for g in range(a+1)]
ans=[[0 for i in range(b+1)]for g in range(a+1)]
def f(i,j):
if dp[i][j]!=-1:return dp[i][j]
if i==0 or j==0:
dp[i][j]=l[i][j]
ans[i][j]=max(ans[i][j],dp[i][j])
return dp[i][j]
fr=f(i-1,j)
se=f(i,j-1)
th=f(i-1,j-1)
if fr==se==th and l[i][j]==1:
dp[i][j]=fr+1
ans[i][j]=max(ans[i][j],dp[i][j])
return dp[i][j]
else:
if l[i][j]==1:
dp[i][j]=min([fr,se,th])+1
else:
dp[i][j]=0
ans[i][j]=max([ans[i][j],ans[i-1][j],ans[i][j-1],ans[i-1][j-1]])
return dp[i][j]
f(a-1,b-1)
#print(dp)
print(ans[a-1][b-1]**2)
반응형
'ps' 카테고리의 다른 글
BOJ 1126(같은 탑)풀이 (0) | 2021.08.05 |
---|---|
BOJ 22348(헬기 착륙장)풀이 (1) | 2021.08.01 |
BOJ 12784(인하니카 공화국)풀이 (0) | 2021.07.05 |
BOJ 8893(사냥꾼)풀이 (0) | 2021.07.02 |
BOJ 5676(음주 코딩)풀이 (0) | 2021.05.08 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- 트리
- 구현
- 그래프 탐색
- BOJ
- 잡봇
- 누적 합
- codeforces
- 그리디 알고리즘
- 최소 스패닝 트리
- A Dance of Fire and Ice
- 수학
- 이분매칭
- discord bot
- Python
- 선분 교차 판정
- 완전 탐색
- 느리게 갱신되는 세그먼트 트리
- 그래프 이론
- 깊이 우선 탐색
- 자료구조
- 다이나믹 프로그래밍
- KOI
- 트리에서의 다이나믹 프로그래밍
- 알고리즘
- 세그먼트 트리
- 개발
- 자료 구조
- C++
- 이분 탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함