coding/알고리즘,자료구조
동적 계획, knapsack 연습 - 제곱수의 합(백준)
Jeo
2022. 2. 10. 13:01
문제: https://www.acmicpc.net/problem/1699
import sys
n = int(sys.stdin.readline().rstrip())
# 초기화에 사용하는 큰 수
INF = int(1e6)
# 동적으로 기입해갈 배열 준비
dy = [INF] * (n+1)
dy[0] = 0
# 사용할 제곱수 종류들을 원소로 갖는 리스트 만들기
squares = []
root = 1
while root*root <= n:
squares.append(root*root)
root += 1
# 큰 수부터 검토하면 갱신 횟수 줄지 않을까 싶어서.. 그런데 sort 가 더 비용이 드나..?
squares.sort(reverse=True)
for k in squares:
for i in range(k, n+1):
dy[i] = min(dy[i], dy[i-k]+1)
print(dy[n])