力扣爆刷第73天--动态规划

力扣爆刷第73天–动态规划

零、背包问题总纲:

背包问题:一维数组,dp[j] = Math.max(dp[j], dp[j-nums[i]] + nums[i])。

01背包遍历顺序:先物品后背包,物品正序,背包逆序。

如若背包正序则会出现同一个物品重复放入,如物品1重量为1,背包空间为1时放入了,背包空间为2时又放入了。
如果先背包后物品,为了避免重复放入背包依然是逆序,背包容量固定时,每种背包容量只能放入一个物品,即为最大的物品,小的物品都放不进来或者被覆盖了。

求组合数排列数:dp[j] += dp[j - nums[i]]

完全背包遍历顺序:物品背包没有先后顺序,物品背包都是正序。因为同一个物品不限量可以放入多次,在背包采用正序中。

完全背包求组合数,物品在外,背包在内。求排列数,背包在外,物品在内。

一、416. 分割等和子集

题目链接:https://leetcode.cn/problems/partition-equal-subset-sum/description/
思路:等和分割子集,就是计算出总和的一半,然后把所有元素往里面装看最大值是否能达到一半,能达到即可划分,这就转换成一个背包问题了。

class Solution {
   
    public boolean canPartition(int[] nums) {
   
        int sum = 0;
        for(int i = 0; i < nums.length; i++) {
   
            sum += nums[i];
        }
        if(sum % 2 != 0) return false;
        sum = sum / 2;
        int[] dp = new int[sum+1];
        for(int i = 0; i < nums.length; i++) {
   
            for(int j = sum; j >= nums[i] ; j--) {
   
                dp[j] = Math.max(dp[j], dp[j-nums[i]] + nums[i]);
            }
        }
        return dp[sum] == sum;
    }
}

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

题目链接:https://leetcode.cn/problems/last-stone-weight-ii/description/
思路:本题说石头之间两两抵消,求最后余数,其实就是把石头划分为两堆,然后计算差值,差值即为最后一块石头的重量,那么求一半和的背包问题,即可。

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

相关推荐

  1. 73--动态规划

    2024-02-21 05:48:02       59 阅读
  2. 74--动态规划01背包

    2024-02-21 05:48:02       53 阅读
  3. 97之hot100五连71-75

    2024-02-21 05:48:02       35 阅读
  4. 117之CodeTop100五连71-75

    2024-02-21 05:48:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 05:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 05:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 05:48:02       82 阅读
  4. Python语言-面向对象

    2024-02-21 05:48:02       91 阅读

热门阅读

  1. vDPA资料/文档/博客 链接

    2024-02-21 05:48:02       61 阅读
  2. 闲鱼商品详情接口api

    2024-02-21 05:48:02       51 阅读
  3. Leetcode 740. Delete and Earn

    2024-02-21 05:48:02       47 阅读
  4. WordPress有没有必要选择付费主题

    2024-02-21 05:48:02       58 阅读
  5. element-plus日期选择器英文改成中文

    2024-02-21 05:48:02       57 阅读
  6. python-adb-getevent转sendevent

    2024-02-21 05:48:02       49 阅读
  7. Message Pack 协议详解及应用

    2024-02-21 05:48:02       57 阅读
  8. redis 主从模式,sentinel 模式配置

    2024-02-21 05:48:02       54 阅读
  9. 2402C++,C++26包索引

    2024-02-21 05:48:02       56 阅读
  10. SpringBoot

    2024-02-21 05:48:02       50 阅读
  11. js遇到的问题 --持续更新

    2024-02-21 05:48:02       50 阅读