代码随想录算法训练营第三十六天|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;
    }
};
相关推荐
scx201310042 分钟前
20251214 字典树总结
算法·字典树
leiming65 分钟前
MobileNetV4 (MNv4)
开发语言·算法
YGGP19 分钟前
【Golang】LeetCode 136. 只出现一次的数字
算法·leetcode
YGGP27 分钟前
【Golang】LeetCode 169. 多数元素
算法·leetcode
顾安r30 分钟前
11.20 脚本网页 数学分支
算法·数学建模·html
少许极端34 分钟前
算法奇妙屋(二十)-回文子串/子序列问题(动态规划)
java·算法·动态规划·图解·回文串·回文序列
天赐学c语言42 分钟前
12.20 - 反转链表II && 传值和传地址的区别
数据结构·c++·算法·链表·leecode
如意鼠43 分钟前
大模型教我成为大模型算法工程师之day20: 预训练语言模型 (Pre-trained Language Models)
人工智能·算法·语言模型
_OP_CHEN43 分钟前
【算法基础篇】(三十六)图论基础之拓扑排序:从原理到实战,搞定 DAG 图的 “先后次序” 难题
c++·算法·蓝桥杯·图论·拓扑排序·算法竞赛·acm/icpc
良木生香1 小时前
【诗句结构-初阶】详解栈和队列(2)---队列
c语言·数据结构·算法·蓝桥杯