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

代码随想录算法训练营第42天|动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、416. 分割等和子集

动态规划:01背包理论基础

动态规划:01背包理论基础(滚动数组)

以上两个问题的代码未本地化保存

416. 分割等和子集

https://leetcode.cn/problems/partition-equal-subset-sum/

复杂的解法

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = 0;
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];
        }
        if (sum % 2) return false;
        vector<vector<bool>> dp(nums.size(), vector<bool>(sum / 2 + 1, false));
        for (int i = 0; i < nums.size(); i++) {
            dp[i][0] = true;
        }
        for (int j = 1; j <= sum / 2; j++) {
            if (j == nums[0]) dp[0][j] = true;
        }
        for (int i = 1; i < nums.size(); i++) {
            for (int j = 0; j <= sum / 2; j++) {
                if (j >= nums[i]) {
                    dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i]];
                }
                else dp[i][j] = dp[i - 1][j];
            }
        }
        return dp[nums.size() - 1][sum / 2];
    }
};

简单的解法

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        if (sum % 2) return false;
        vector<int> dp(sum / 2 + 1, 0);
        for (int i = 1; i < nums.size(); i++) {
            for (int j = sum / 2; j >= 0; j--) {
                if (j >= nums[i]) {
                    dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
                }
            }
        }
        return !(sum / 2 - dp[sum / 2]);
    }
};

 

相关文章:

  • OpenGLES:绘制一个混色旋转的3D圆柱
  • java导出word(含图片、表格)
  • FFmpeg:打印音/视频信息(Meta信息)
  • B树和B+树的介绍和对比,以及MySQL为何选择B+树
  • AS环境,版本问题,android开发布局知识
  • ROS2 库包设置和使用 Catch2 进行单元测试
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token
  • 新款UI动态壁纸头像潮图小程序源码
  • Python安装指南:安装Python、配置Python环境(附安装包)
  • 华为云云耀云服务器L实例评测|部署个人音乐流媒体服务器 navidrome
  • AWS Lambda Golang HelloWorld 快速入门
  • Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!
  • PsychoPy Coder 心理学实验 斯特鲁普效应
  • 代码随想录Day57、58 | 392.判断子序列 | 115. 不同的子序列 | 583. 两个字符串的删除操作 | 72. 编辑距离
  • 《幸福之路》罗素(读书笔记)
  • 力扣-367.有效的完全平方数
  • Python中取2023, 9, 1——2023, 10, 31的全部时间
  • JAVA面经整理(8)
  • 使用Jest测试Cesium源码
  • Vue中实现自定义编辑邮件发送到指定邮箱(纯前端实现)
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够
  • 韩国总统选战打响:7人角逐李在明领跑,执政党临阵换将陷入分裂
  • 梅花奖在上海|穿上初演时的服装,“鹮仙”朱洁静再起飞
  • 科学家用AI寻找外星生命
  • 巴基斯坦称未违反停火协议