seungriyou / algorithm-study

알고리즘 & SQL 문제 풀이 기록
https://leetcode.com/u/summer_y
0 stars 0 forks source link

[LC] 2787. Ways to Express an Integer as Sum of Powers #87

Open seungriyou opened 5 months ago

seungriyou commented 5 months ago

https://leetcode.com/problems/ways-to-express-an-integer-as-sum-of-powers/ similar to #71

Approach

0/1 knapsack 문제이다.

Idea 1: 2D DP


Idea 2: 1D DP

2D DP 풀이과정을 보면, dp[i - 1][j], dp[i - 1][j - val]만 사용하는 것을 알 수 있다. 따라서 1D DP로 space optimize가 가능하다.

while 문 순회를 통해 row(i)를 없애고, j >= i ** x인 범위에서 거꾸로 j를 순회하면서 dp table을 채워나간다.

# dp[j]: 1^x ~ i^x 숫자로 이루어진 조합 중, 합쳐서 j가 되는 조합의 개수
dp = [0] * (n + 1)
dp[0] = 1

i = 1
while (val := i ** x) <= n:
    for j in range(n, val - 1, -1):
        dp[j] = (dp[j] + dp[j - val]) % mod
    i += 1


Complexity