代码随想录算法训练营第三十六天|leetcode416题

一、leetcode第416题

本题要求数组分成两个子集,子集的和是否相等,可以转化为0-1背包问题,即背包容量为数组元素和的1/2,物品大小即为元素大小。设置dp数组,dp[i]表示为背包容量为i能放置的元素大小,可知dp[i]为不放第i个元素和放第i个元素二者的最大值,由于单层数组的特殊性要从后向前遍历才能使得每一个元素只参与dp数组运算一次,最后如果dp数组中下标为target的元素值为target则为true,否则返回false。

具体代码如下:

cpp 复制代码
class Solution {
public:
    bool canPartition(vector<int>& nums) {
    vector<int>dp(10001,0);
    int sum=0;
    for(int i=0;i<nums.size();i++)
    {
        sum+=nums[i];
    }
    if(sum%2==1){return false;}
    int target=sum/2;
    for(int i=0;i<nums.size();i++)
    {
        for(int j=target;j>=nums[i];j--)
        {
            dp[j]=max(dp[j],dp[j-nums[i]]+nums[i]);
        }
    }
    if(dp[target]==target){return true;}
    return false;
    }
};
相关推荐
黑眼圈子1 天前
总结一下用Java做算法的常用类和方法
java·开发语言·算法
apcipot_rain1 天前
天梯赛练习集 时间规划 限时复盘 中档题详解(L1-6~L2-4)
算法
再卷也是菜1 天前
第一章、线性代数(2)高斯消元法
线性代数·算法
NAGNIP1 天前
一文搞懂CNN经典架构-EfficientNet!
算法·面试
如何原谅奋力过但无声1 天前
【chap11-动态规划(上 - 基础题目&背包问题)】用Python3刷《代码随想录》
数据结构·python·算法·动态规划
小宇的天下1 天前
Calibre LVS Circuit Comparison(2)
算法·lvs
迈巴赫车主1 天前
求最大公约数-欧几里得算法(辗转相除法)
算法·最大公约数
lxl13071 天前
C++算法(15)BFS_FloodFill
算法·宽度优先
小王C语言1 天前
【基础IO】————简单设计一下libc库
前端·数据结构·算法
亦复何言??1 天前
BeyondMimic 论文解析
人工智能·算法·机器人