Skip to content

Commit 40a2fe8

Browse files
committed
added unbounded knapsack problems
1 parent a044098 commit 40a2fe8

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution:
2+
def coinChange(self, coins: List[int], amount: int) -> int:
3+
n = len(coins)
4+
dp = [[float('inf') for _ in range(amount+1)] for _ in range(n+1)]
5+
6+
for i in range(n+1):
7+
dp[i][0] = 0
8+
9+
for i in range(n+1):
10+
for j in range(amount+1):
11+
if coins[i-1] > j:
12+
dp[i][j] = dp[i-1][j]
13+
else:
14+
dp[i][j] = min(1 + dp[i][j-coins[i-1]], dp[i-1][j])
15+
16+
return dp[n][amount] if dp[n][amount] != float('inf') else -1
17+
18+
# optimized solution
19+
class Solution2:
20+
def coinChange(self, coins: List[int], amount: int) -> int:
21+
dp = [float('inf') for _ in range(amount+1)]
22+
dp[0] = 0
23+
for coin in coins:
24+
for i in range(amount-coin+1):
25+
dp[i+coin] = min(dp[i+coin], dp[i]+1)
26+
return dp[amount] if dp[amount] != float('inf') else -1
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def change(self, amount: int, coins: List[int]) -> int:
3+
n = len(coins)
4+
dp = [[0 for _ in range(amount+1)] for _ in range(n+1)]
5+
6+
for i in range(n+1):
7+
dp[i][0] = 1
8+
9+
for i in range(1, n+1):
10+
for j in range(amount+1):
11+
if j >= coins[i-1]:
12+
dp[i][j] = dp[i][j-coins[i-1]] + dp[i-1][j]
13+
else:
14+
dp[i][j] = dp[i-1][j]
15+
16+
return dp[n][amount]
17+

0 commit comments

Comments
 (0)