算法训练营第三十五天(8.22)| 动态规划Part04:背包

Leecode 416.分割等和子集

题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目类型:基础动态规划

class Solution {
public:
    bool canPartition(vector& nums) {
        int sum = accumulate(nums.begin(), nums.end(), 0), n = nums.size();
        if (sum % 2 != 0) return false;
        int bagsize = sum / 2;
        // dp数组表示当背包容量为i时,得到的最大价值
        vector dp(sum + 1, 0);
        // 遍历物品
        for (int i = 0; i < n; ++i) {
            for (int j = bagsize; j >= nums[i]; --j) {
                dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);
            }
        }
        return dp[bagsize] == sum / 2;
    };
};

你可能感兴趣的:(算法训练营,算法,leetcode,动态规划)