当前位置: 首页 > article >正文

第43天|dp

今天的题都是0-1背包的变种题

1049. Last Stone Weight II

0-1 背包问题,dp[j]仍然为到j为止能最大装多少.本题的最终结果为s=2dp[-1]这是因为题目是两个石头相撞,所以就是求一半的值dp[-1]然后对撞另一半s-dp[-1]就行了

当j为0时,没有石头可装,所以dp[0]=0

class Solution:
    def lastStoneWeightII(self, stones: List[int]) -> int:
        s=sum(stones)
        target=s//2
        dp=[0 for _ in range(target+1)]
        for i in range(len(stones)):
            for j in range(target,stones[i]-1,-1):
                dp[j]=max(dp[j],dp[j-stones[i]]+stones[i])
        return s-2*dp[-1]

494. Target Sum

0-1背包变种. dp[j]代表的是组成j能有多少种方法. 我们知道x-(sum-x)=target 也即是说 x=(s+target)//2是正数的和,那我们只要找到组成正数和有最多有多少种方法就可以了.那么dp[j]代表的就是对于每个num所对应的dp[j]的和

当j=0时,至少有1种方法,所以dp[0]=1

class Solution:
    def findTargetSumWays(self, nums: List[int], target: int) -> int:
        s=sum(nums)
        if s<abs(target) or (s+target)%2==1:
            return 0
        bag=(target+s)//2
        dp=[0 for _ in range(bag+1)]
        dp[0]=1
        for i in range(len(nums)):
            for j in range(bag,nums[i]-1,-1):
                dp[j]+=dp[j-nums[i]]
        return dp[-1]

474. Ones and Zeroes

0-1背包问题.但是dp[i][j]为到i个0j个1为止最多有多少个string.那递推公式就是dp[i][j]=max(dp[i][j],dp[i-zero][j-one]+1).

递归顺序上还是从后到前且两层都是从后到前

初值dp[0][0]=0因为没有0和1时也没有string

class Solution:
    def findMaxForm(self, strs: List[str], m: int, n: int) -> int:
        dp=[[0 for _ in range(n+1)] for _ in range(m+1)]
        for st in strs:
            one=st.count('1')
            zero=st.count('0')
            for i in range(m,zero-1,-1):
                for j in range(n,one-1,-1):
                    dp[i][j]=max(dp[i][j],dp[i-zero][j-one]+1)
        return dp[-1][-1]

http://www.kler.cn/a/15399.html

相关文章:

  • 三个练手的软件测试实战项目(附全套视频跟源码)偷偷卷死他们
  • Golang-指针(pointer)
  • Linux 系统文件权限管理(参考菜鸟教程)
  • 滑动窗口最大/小值(单调队列)
  • 标准ACL配置
  • 代码随想录Day64(一刷完结)
  • linux0.12
  • Java BIO(Blocking IO:同步并阻塞式IO)
  • idea使用 ( 五 ) idea常用快捷键
  • 知识图谱实战应用6-基于知识推理进行知识补全的功能
  • 「 Redis 」RDB和AOF持久化全面解析
  • 使用Sybase sp_recompile重新编译存储过程和触发器
  • 如何使用osquery在Windows上实时监控文件?
  • Java新提案,最终还是靠近C#了
  • 高度可定制可用于商用目的全流程供应链系统(全部源码)
  • Python 二进制 八进制 十进制 十六进制之间的转换
  • JSP数据库连接池的研究与实现(源代码+论文)
  • 嵌入式安卓开发:使用Camera2获取相机
  • 网络安全真的没法入行吗?
  • RedHat8配置本地YUM源