首页 > 其他分享 >代码随想录训练营第四十三天 | 动态规划背包问题

代码随想录训练营第四十三天 | 动态规划背包问题

时间:2022-11-24 13:46:12浏览次数:61  
标签:target 四十三天 nums int 训练营 随想录 start sum dp

 今天是第四十三天,还是背包问题

1049. 最后一块石头的重量 II 

class Solution {
    public int lastStoneWeightII(int[] stones) {
        int n = stones.length;
        int sum = 0;
        for (int i : stones) {
            sum += i;
        }
        int target = sum >> 1;
        
        int[] dp = new int[target + 1];
        for (int i = 0; i < n; i++) {
            
            for (int j = target; j >= stones[i]; j--) {
                
                dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);
            }
        }
        return sum - 2 * dp[target];
    }
    
}

怎么啥都能转化成背包

494. 目标和 

class Solution {
    int res = 0;
    void backTracking(int[]nums,int target,int start,int sum){
        if(sum==target && start == nums.length){
            res++;
            return;
        }
        if(start>=nums.length)
            return;
        backTracking(nums,target,start+1,sum+nums[start]);
        backTracking(nums,target,start+1,sum-nums[start]);
    }

    public int findTargetSumWays(int[] nums, int target) {
        backTracking(nums,target,0,0);
        return res;
    }
}

动态规划没看会,回溯看会了

474.一和零 

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        int[][] dp = new int[101][101];
        for(String s : strs){
           int a = 0;
           int b = 0;
           char[] temp = s.toCharArray();
           for(char c : temp){
               if(c == '0') a++;
               if(c == '1') b++;
           }
           for (int i = m; i >= a; i --) {
               for (int j = n; j >= b; j --) {
                   dp[i][j] = Math.max(dp[i][j], dp[i - a][j - b] + 1);
               }
           }
       }
       return dp[m][n];
    }
}

还是背包

 

今天的三道题都没太弄懂。。。。好头痛,周末好好学一下重头

标签:target,四十三天,nums,int,训练营,随想录,start,sum,dp
From: https://www.cnblogs.com/catSoda/p/16921582.html

相关文章

  • 代码随想录——链表
    移除链表元素题目简单注意:头节点也要删除时的处理方式下面第三种方法,连续几个都为要删除的节点时要注意/***添加虚节点方式*时间复杂度O(n)*空间复杂度......
  • 代码随想录算法训练营第四天| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节
    24.两两交换链表中的节点classSolution{publicListNodeswapPairs(ListNodehead){if(head==null||head.next==null){returnhe......
  • 代码随想录Day29
    LeetCode654.最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构......
  • 代码随想录算法训练营Day08|344. 反转字符串、541. 反转字符串 II、剑指 Offer 05. 替
    代码随想录算法训练营Day08|344.反转字符串、541.反转字符串II、剑指Offer05.替换空格、151.反转字符串中的单词、剑指Offer58-II.左旋转字符串344.反转字符......
  • javascript-代码随想录训练营day8
    344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。......
  • 代码随想录——数组
    前言:由于时间有限,刷代码随想录就不再像剑指offer的几篇博客那样把题解写的那么详细了。这里仅写几个注意点,详细题解看卡神的即可。二分查找题目 简单注意:区间的处理......
  • 随想录(在实践中学习kernel代码)
       记得我在读书的时候,虽然老师也教过操作系统的课程,但是自己的理解却不是很充分,实践部分的内容就更少。对于课程中的内容,比如说中断、互斥、线程、IO等概念常常也是一......
  • 随想录(开源代码的学习方法)
     一、历史    开源代码作为一种特色的产物,随着物联网的进步得到了前所未有的发展。一开始,很多代码其实不是开源工程,后来软件的开发商发现根本没法用这些代码来挣钱,所......
  • 随想录(用好红黑树)
      红黑树作为一种特殊类型的二叉树,在软件中有很多的用处。但是在网络上面,讲解红黑树的文章和博客很多,可是真正找一份可以信赖的、方便使用的红黑树代码却不多。本篇文章......
  • 随想录(招聘怎样的员工)
      对很多IT公司来说,招聘都是一件大事。无论是校园招聘、社会招聘,公司都会投入到很大的人力和财力来开展招聘工作。一个公司的人员构成,很大程度上决定了这个公司的业务形......