代码随想录刷题第四十四天
题目思路:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/093ec946b279319030e2145886a7c953.jpeg)
代码实现:
NV = input().split()
N, V = int(NV[0]), int(NV[1])
items = {}
for i in range(N):
key = input().split()
key = [int(in_str) for in_str in key]
items[i] = key
dp = [[0 for _ in range(V+1)] for _ in range(N)]
for i in range(N):
for j in range(1, V+1):
if items[i][0] > j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = max(dp[i-1][j], dp[i][j-items[i][0]]+items[i][1])
print(dp[N-1][V])
题目思路:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c3e299a4ddbbb9a2fdc229fa8cecd069.jpeg)
代码实现:
NV = input().split()
N, V = int(NV[0]), int(NV[1])
items = {}
for i in range(N):
key = input().split()
key = [int(in_str) for in_str in key]
items[i] = key
dp = [0 for _ in range(V+1)]
for i in range(N):
for j in range(1, V+1):
if items[i][0] > j:
dp[j] = dp[j]
else:
dp[j] = max(dp[j], dp[j-items[i][0]]+items[i][1])
print(dp[V])
零钱兑换 II (LC 518)
题目思路:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1f413065f0208ce9ef4d1773352c8800.jpeg)
代码实现:
class Solution:
def change(self, amount: int, coins: List[int]) -> int:
dp = [[0 for _ in range(amount+1)] for _ in range(len(coins))]
for i in range(len(coins)):
dp[i][0] = 1
for i in range(len(coins)):
for j in range(1, amount+1):
if coins[i]>j:
dp[i][j] = dp[i-1][j]
else:
dp[i][j] = dp[i-1][j] + dp[i][j-coins[i]]
print(dp)
return dp[len(coins)-1][amount]
组合总和 IV (LC 377)
题目思路:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1210345ebd300aa6d0b135aba2fe2ec1.jpeg)
代码实现:
class Solution:
def combinationSum4(self, nums: List[int], target: int) -> int:
dp = [0 for _ in range(target+1)]
dp[0] = 1
for j in range(target+1):
for i in range(len(nums)):
if nums[i]>j:
dp[j] = dp[j]
else:
dp[j] = dp[j]+ dp[j-nums[i]]
return dp[target]