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

Leetcode 416. 分割等和子集 (动态规划-01背包问题)

原题链接:Leetcode 416. 分割等和子集

在这里插入图片描述

下面参考官解:分割等和子集

这个题目的隐藏含义是:判断是否可以从数组中选出一些数字,使得这些数字的和等于整个数组的元素和的一半

创建二维数组 dp,包含 n 行 target+1 列,其中 dp[i][j] 表示从数组的 [0,i] 下标范围内选取若干个正整数(可以是 0 个),是否存在一种选取方案使得被选取的正整数的和等于 j。初始时,dp 中的全部元素都是 false。

初始化(很重要!!!):

  • 前 i 个元素中如果不选取任何正整数,则他们的和等于 0 ,即存在这种情况 dp[i][0]=true

状态转移方程:

dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i-1]];

  • 不选当前 i , 和为j ,则看是否有 dp[i-1][j]=true的情况
  • 选当前 i , 和为j , 即看是否有 dp[i-1][j-nums[i-1]]=true的情况
  • 用“或”连接这两种情况
class Solution {
public:bool canPartition(vector<int>& nums) {int n=nums.size();if(n==1) return false;int sum=0;int max_num=0;for(auto x:nums) {sum+=x;max_num=max(max_num,x);}if(sum%2!=0) return false;int target = sum/2;if(max_num>target) return false;// dp[i][j] 表示前i个元素的和是否可以==jvector<vector<bool>> dp(n+1,vector<bool>(target+1,false));for(int i=0;i<=n;i++){dp[i][0]=true;}for(int i=1;i<=n;i++){for(int j=1;j<=target;j++){dp[i][j]= dp[i-1][j];if(j>=nums[i-1]){dp[i][j] = dp[i][j] || dp[i-1][j-nums[i-1]];}}}return dp[n][target];}
};

空间优化:

class Solution {
public:bool canPartition(vector<int>& nums) {int n=nums.size();if(n==1) return false;int sum=0;int max_num=0;for(auto x:nums) {sum+=x;max_num=max(max_num,x);}if(sum%2!=0) return false;int target = sum/2;if(max_num>target) return false;// dp[j] 表示数组的子数组的和是否可以==jvector<bool> dp(target+1,false);dp[0]=true;for(int i=0;i<n;i++){for(int j=target;j>=nums[i];j--){dp[j] = dp[j] || dp[j-nums[i]];}}return dp[target];}
};
http://www.dtcms.com/a/351378.html

相关文章:

  • 通过接口的形式访问ragflow的agent服务
  • C# 如何用工厂方法模式设计游泳比赛排位系统?
  • 机器学习(二)特征工程
  • 机器学习-支持向量机
  • 【Java SE】深入理解异常处理机制
  • Spring AI 入门指南:三步将AI集成到Spring Boot应用
  • 开发避坑指南(38):DOM4J解析XML文件报错“前言中不允许有内容”的解决方案
  • WPF TabControl页面绑定ItemsSource
  • F006 vue+flask python 垃圾分类可视化系统+爬虫
  • 力扣(逆波兰表达式求值)
  • 英伟达 Spectrum-XGS:重构 AI 基础设施,开启跨域超级工厂时代
  • Day3--HOT100--42. 接雨水,3. 无重复字符的最长子串,438. 找到字符串中所有字母异位词
  • JHipster 生成器快速入门
  • 爬虫 API:从技术架构到实战落地的全维度解析
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • HarmonyOS 中 @Observed 与 @ObjectLink:对象级别的响应式数据管理
  • 鸿蒙中使用极光推送
  • 阿里云docker搭建的mysql无法访问
  • 如何下载MySQL小白指南 (以 Windows 为例)
  • CNN 中 3×3 卷积核等设计背后的底层逻辑
  • 负载均衡之带权重的随机负载均衡算法详解与实现
  • 【LeetCode】动态规划——198.打家劫舍、213.打家劫舍||、337.打家劫舍|||
  • 开发避坑指南(37):Vue3 标签页实现攻略
  • 【Python系列】Flask 和 FastAPI对比
  • 高性价比的云手机该怎样进行选择?
  • GraphRAG——v0.3.5版本
  • 从MySQL到OpenTenBase:电商平台分布式数据库架构升级实战
  • TCP协议11种状态
  • 【人工智能AI、机器学习ML、深度学习DL、基础模型FM、LLM、GPT、Generative AI 分别是什么?他们之间的关系是什么?】
  • 一个头像图片滚动轮播组件(React实现)