https://www.acmicpc.net/problem/10803
10803번: 정사각형 만들기
두 변의 길이가 모두 양의 정수인 직사각형 모양의 종이가 주어져 있다. 이 종이를 칼로 여러 번 잘라서 모든 조각이 한 변의 길이가 양의 정수인 정사각형이 되도록 하고자 한다. 칼로 종이를
www.acmicpc.net
dp로 모든 n, m에 대하여 구하면 TLE를 받기에 뭔가의 조건으로 시간복잡도를 줄여야한다.
대부분의 풀이는
WLOG n≤m 에 대해 3n≤m의 조건에 대하여 dp[n][m]=dp[n][m−n]+1을 해주고 있다.
이렇게 타이트한 조건에 대해선 증명하지 못하였고 정당성에 대해서도 잘 모르겠다.
찾은 조건은 m>=n23 에 대하여 dp[n][m]=dp[n][m−n]+1 이다.
이를 증명해보겠다.
# Definition)
f(n,m): min number of squares required to fill n×m square
# Proof)
Lemma 1) f(n,m)<=max(n,m)
귀납적으로 보일 수 있다.
1) n=1 and m=1이라면 f(n,m)=1<=1=max(n,m)
2) n=m f(n,m)=1<=max(n,m)
3) 1≤n≤a, 1≤m≤b에 대해 성립할때 n=a+1,m=b에 대해서도 성립함을 보이자.
3-1) a+1<b
3-1-i)a+1∣b
f(n,m)=f(a+1,b) ≤ba+1 ≤b ≤max(a+1,b)=max(n,m)
3-1-ii)a+1∤b
b=(a+1)p+q 라 두자(0≤q<a+1)
f(n,m)=f(a+1,b) ≤p+f(q,a) ≤p+max(a,q) ≤a+q+p ≤(a+1)p+q= b=max(n,m)
3-2) a+1>b
f(n,m)=f(a+1,b) ≤1+f(a−b+1,b) ≤1+max(a−b+1,b) ≤max(a−b+2,b+1) ≤a+1=≤max(a+1,b)
3-3) a+1=b
f(a+1,b)=1<=max(a+1,b)
3-1, 3-2, 3-3 으로 부터 1≤n≤a, 1≤m≤b에 대해 성립할때 n=a+1,m=b에 대해서도 성립함이 보여지고 f(1,1)=1<=max(1,1)의 초기조건으로 본 명제가 성립함을 알 수 있다.
Lemma 2) f(n,n+m)<=f(n,m)+1
n×(n+m) 사각형은 n×m과 n×n 사각형 두개로 분할이 가능하니 자명하게 만족한다.
Lemma 3) f(n,m)>f(n,m−n) if m≥n23
m≥n23 라는 제약조건이 뜬금없다고 생각 할 수 있으니 저 조건까지 유도해보자.
1. f(n,n+m)의 최적해가 n×n사각형을 포함하는 경우
최적해에 포함된 n×n사각형 1개만을 제거하여 만들어지는 n×m 사각형도 f(n,m)의 최적해일 것이다.
따라서 f(n,n+m)=1+f(n,m)>f(n,m) 임은 자명하다.
2. f(n,n+m)의 최적해가 n×n사각형을 포함하지 않는 경우
f(n,n+m)의 최적해에서 왼쪽 끝부터 n×(nk)의 사각형의 윈도우를 잡고 해당 윈도우와 겹쳐있는
(S={p ∣ p∈window and p∈square}일때 size(S)>0) 모든 사각형을 제거, k개의 n×n의 사각형으로 채운다.
윈도우의 왼쪽 끝부터 오른쪽 끝까지 n×1 단위로 몇개의 사각형이 제거 되는지 생각해보자.
n×1 안에 포함된 사각형들의 한변의 길이를 [a1,a2,…,ac] 라 하면
c∑i=11a1 으로 표시 할 수 있다.
(예를 들어 3×3 사각형 1개에 대하여 내부의 1×1 사각형이 제거 되었을때 19개가 제거 된걸로 취급하여 계산하면 슬라이드가 사각형을 포함할시 정확히 1개로 세어진다.)
c∑i=1ai = n으로부터
c∑i=11a1 ≥ c(c∏i=11a1)1c
≥ c×c(c∑i=1a21) =c2n ≥4n
임을 알 수 있다. ( c<2라면 1에 해당됨으로 모순이다)
이후, k개의 n×n의 사각형으로 채운다면 제거된 사각형들중 window와 겹치지 않은 부분들만 메꿔주면 타일링이 완료된다. 이러한 t개의 사각형들(window와 겹치지 않은 부분들) 의 길이 정보를 다음과 같이 표기하자.
{(verti,hori) ∣ 1≤i≤t}
t∑i=1f(verti,hori) ≤t∑i=1max(verti,hori) ≤=n
(∵ Lemma 1)
이 얻어진다.
따라서 이렇게 구성한 타일링에 대하여 사용된 총 타일의 수에 대해 다음과 같이 쓸 수 있다.
f(n,m)−deleted_tile+tiles_to_fill ≤f(n,m)−4n(nk)+k+n
여기서 다음의 조건
f(n,m)−4n(nk)+k+n<f(n,m) ⟺ k>n3
을 이용하여 위의 식을 다시 써보면 k>n3일때
f(n,m)−deleted_tile+tiles_to_fill ≤f(n,m)−4n(nk)+k+n <f(n,m)
최적해보다 작게 만들 수 있게되어 모순이다.
고로, m≥nk≥n23(⟺ k>n3) 인 경우, f(n,n+m)의 최적해는 n×n사각형을 포함함을 알 수 있고 본 명제가 증명 된다.
최종적으로 Lemma 2)와 Lemma 3)으로부터 f(n,m)=f(n,m−n)+1 if m≥n23
가 성립함이 증명된다.