문제) 백준 - 동적 계획법 - 정사각형 만들기
https://www.acmicpc.net/problem/10803
10803번: 정사각형 만들기
두 변의 길이가 모두 양의 정수인 직사각형 모양의 종이가 주어져 있다. 이 종이를 칼로 여러 번 잘라서 모든 조각이 한 변의 길이가 양의 정수인 정사각형이 되도록 하고자 한다. 칼로 종이를
www.acmicpc.net
쉬운 DP문제일 줄 알았으나, TLE에서 최적화하느라 꽤 걸린 문제였습니다.

(i)의 방법으로 1~n/2, 1~m/2까지 자릅니다. 하지만 큰 수에서 O(n*m)의 연산이 필요하기 때문에 큰 수에서는 (ii) 방법을 이용하여 최소 정사각형 개수를 구합니다.
C++ 소스코드)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
int solve(int n, int m) { | |
if (n % m == 0) return n / m; | |
if (n == m) return 1; | |
int& ret = cache[n][m]; | |
if (ret != -1) return ret; | |
// 정사각형 최대 개수 | |
ret = n * m; | |
if(n >= 3 * m) | |
ret = min(ret, solve(n - m, m) + 1); | |
else { | |
for (int i = 1; i <= n / 2; ++i) | |
ret = min(ret, solve(n - i, m) + solve(i, m)); | |
for (int j = 1; j <= m / 2; ++j) | |
ret = min(ret, solve(n, m - j) + solve(n, j)); | |
} | |
return ret; | |
} |
Full Code)
GitHub - Chocochip101/BOJ_Solution: BOJ Solutions
BOJ Solutions. Contribute to Chocochip101/BOJ_Solution development by creating an account on GitHub.
github.com
반응형
'PS(Problem Solving) > 백준_BOJ' 카테고리의 다른 글
[백준] 2636번 - 치즈 (C++) 문제 및 풀이 (0) | 2021.12.23 |
---|---|
[백준] 5582번 - 공통 부분 문자열 (C++) 문제 및 풀이 (0) | 2021.12.22 |
[백준] 1213번 - 팰린드롬 만들기 (C++) 문제 및 풀이 (0) | 2021.12.20 |
[백준] 1043번 - 거짓말 (C++) 문제 및 풀이 (0) | 2021.12.16 |
[백준] 13913번 숨바꼭질 4 (C++) 문제 및 풀이 (0) | 2021.12.14 |
댓글