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

408算法题leetcode--第37天

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

题目地址:1049. 最后一块石头的重量 II - 力扣(LeetCode)

题解思路:01背包

时间复杂度:O(n*m)

空间复杂度:O(m)

代码:

class Solution {
public:
    int lastStoneWeightII(vector<int>& stones) {
        // 01背包,容量和价值一样,即目标是最大化使用容量
        // 如[abcd],抵消后可以为a+b+c-d,也可以是a+b-c-d,即一堆和-另一堆和的最小值
        // 第一堆 = sum - dp[sum/2],第二堆 = dp[sum / 2]
        // 接下来开始dp,转化为找dp[]的最大值
        // dp[]: 容量为j的背包的最大值
        // 转移:dp[j] = max(dp[j], dp[j - stones[i]] + stones[i])
        // 初始化:dp[i] = 0
        // 顺序:先种类,后重量
        vector<int>dp(15001, 0);
        int sum = 0;
        for(auto i : stones) sum += i;
        int target = sum / 2;
        int size = stones.size();
        for(int i = 0; i < size; i++){
            for(int j = target; j >= stones[i]; j--){
                dp[j] = max(dp[j], dp[j - stones[i]] + stones[i]);
            }
        }
        return sum - dp[target] - dp[target];
    }
};

416. 分割等和子集

题目地址:416. 分割等和子集 - 力扣(LeetCode)

题解思路:dp,01背包

时间复杂度:O(n^2)

空间复杂度:O(n)

代码:

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        // 01背包,容量和价值一样,即目标是最大化使用容量
        // dp[]:容量为j的背包的最大价值
        // dp[i] = i,只要dp[sum / 2] = sum / 2就返回true
        // 初始化:dp[0] = 0
        // 顺序:种类,容量
        vector<int>dp(10001, 0);  // 200 * 100 / 2
        int sum = 0;
        for(auto i : nums) sum += i;
        int size = nums.size();
        for(int i = 0; i < size; i++){
            for(int j = sum / 2; j >= nums[i]; j--){
                dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
            }
        }
        return dp[sum / 2] * 2 == sum;  // 可以前面提前判断,如果sum为奇数,返回false
    }
};

http://www.kler.cn/news/361414.html

相关文章:

  • 软件质量管理体系,软件评审资料,资质认证资料,安全建设,数据安全及项目管理全套资料(原件参考)
  • 【日志】Unity3D模型导入基本问题以及浅谈游戏框架
  • vivado 采用 SSI 器件进行设计
  • R语言统计分析——置换检验1
  • java游戏网站源码
  • C++研发笔记5——C语言程序设计初阶学习笔记3
  • 【经验】无线鼠标、键盘的usb接收器配对
  • autMan内置redis服务的使用方法
  • 记,项目解决
  • androidrro ResourceOverlay 调查
  • Gstreamer的webrtcbin插件
  • Nova-Admin:基于Vue3、Vite、TypeScript和NaiveUI的开源简洁灵活管理模板
  • Java代码说明设计模式
  • QT--文本框 QLineEdit、qtextedit
  • 深度学习——线性神经网络(五、图像分类数据集——Fashion-MNIST数据集)
  • C++ TVM stack 继续
  • GAMES104:17 游戏引擎的玩法系统:高级AI-学习笔记
  • 流量PID控制(开度前馈量计算+辅助PID)
  • 2024人工智能技术的普及 如何看待AI技术的应用前景
  • 文件(下)
  • 2024.10.22 软考学习笔记
  • 阅读笔记 Marketing Management Chapter 12
  • 筑牢理性防线,“卡游启智,理性护航”青少年健康消费倡议发布
  • java工程启动优化
  • Redis持久化机制
  • 深入理解InnoDB底层原理:从数据结构到逻辑架构