• leetcode 494.目标和 动态规划背包问题 (c++版本)


    题目描述

    在这里插入图片描述
    说白了就是让一部分数减去剩下的一部数使得差值为target,计算有多少中组合的方法
    下面来个数学公式推导一下
    l e f t + r i g h t = s u m l e f t − r i g h t = t a r g e t l e f t = s u m − l e f t + t a r g e t l e f t = ( s u m + t a r g e t ) / 2 left+right = sum\\ left-right=target\\ left=sum-left+target\\ left=(sum+target)/2 left+right=sumleftright=targetleft=sumleft+targetleft=(sum+target)/2
    那么我们现在变成求有多少种方法使得和为left(即我们新的target)
    难点就在于我们的递推公式怎么写
    dp[j]的含义是在背包容量为j的情况下 有dp[j]种方法使得和为left
    假如j为5的话
    有一个1的话那么dp[5]有dp[4]种构成
    有两个1的话那么dp[5]有dp[3]种构成
    有三个1的话那么dp[5]有dp[2]种构成
    有四个1的话那么dp[5]有dp[1]种构成
    有五个1的话那么dp[5]有dp[5]种构成
    因此递推公式就是dp[j] += dp[j-nums[i]]

    代码实现

    class Solution {
    public:
        int findTargetSumWays(vector<int>& nums, int target) {
            int sum = 0;
            for(int i = 0; i < nums.size(); i++)
            {
                sum += nums[i];
            }
            if(abs(target) > sum)
            {
                return 0;
            }
            int our_targrt = (sum + target) / 2;
            if(our_targrt<0 || (sum+target)%2==1)
            {	// 好好思考一下这两种情况为什么不行
                return 0;
            }
            vector<int> dp(our_targrt+1, 0);
            dp[0] = 1;
            for(int i = 0; i < nums.size(); i++)
            {
                for(int j = our_targrt; j >= nums[i]; j--)
                {
                    dp[j] += dp[j-nums[i]]; 
                }
            }
            return dp[our_targrt];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    Web前端HTML样式 CSS选择器
    MySQL底层知识总结
    java--包
    java mysql ssm框架的同城配送系统源码
    Docker安装MySQL数据库
    【UniApp】-uni-app-数据传递补充
    17. 机器学习 - 随机森林
    *(长期更新)软考网络工程师学习笔记——Section 21 防火墙技术原理
    深度学习的数学基础
    stm32f4xx-GPIO
  • 原文地址:https://blog.csdn.net/weixin_45748989/article/details/128000018