代码随想录算法训练营第37天|322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包

322. 零钱兑换

leetcode 322. 零钱兑换
代码随想录

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        # dp[i] 表示凑成i所需要最小的硬币数量
        # 选了当前这个硬币coins[j],之后剩下就是dp[i- coins[j]]
        # dp[i] = dp[i- coins[j]] + 1
        dp  = [float('inf')] * (amount + 1)
        dp[0] = 0
        for i in coins:
            for j in range(i,amount + 1):
                if dp[j-i] != float('inf'):
                    dp[j] = min(dp[j], dp[j-i] + 1)
        return -1 if dp[-1] == float('inf') else dp[-1]

279.完全平方数

leetcode 279.完全平方数
代码随想录

class Solution:
    def numSquares(self, n: int) -> int:
        # dp[i]: 和为i的完全平方数的最小数量为dp[i]
        # dp[i] = dp[i - [完全平方数]] + 1
        dp = [n] * (n + 1)
        dp[0] = 0

        for i in range(1,int(n**0.5)+1):
            for j in range(i*i, n+1):
                dp[j] = min(dp[j], dp[j-i*i] + 1)
        return dp[-1]

139.单词拆分

leetcode 139.单词拆分
代码随想录

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        n = len(s)
        dp = [False] * (n+1)
        dp[0] = True
        for i in range(1,n+1):
            for j in wordDict:
                if i >= len(j):
                    # 当前单词取出来,再看dp[i-len(j)]
                    dp[i] = dp[i] or dp[i - len(j)] and j == s[i - len(j):i]
        return dp[-1]

多重背包

卡码网 56. 携带矿石资源
代码随想录 多重背包

多重背包把物品展开就变成了01背包。

C, N = map(int, input().split(" "))
weights = [int(x) for x in input().split(" ")]
values = [int(x) for x in input().split(" ")]
nums = [int(x) for x in input().split(" ")]


dp = [0] * (C + 1)

for i in range(N):
    for j in range(C, weights[i]-1,-1):
        for k in range(1, nums[i] + 1):
            if k * weights[i] > j:
                break
            dp[j] = max(dp[j], dp[j- k*weights[i]] + k * values[i])
print(dp[-1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值