【代码随想录day 35】 力扣 494. 目标和

视频讲解:https://www.bilibili.com/video/BV1o8411j73x/?vd_source=a935eaede74a204ec74fd041b917810c

文档讲解:https://programmercarl.com/0494.目标和.html#思路

力扣题目:https://leetcode.cn/problems/target-sum/

cpp 复制代码
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; // 此时没有方案
        if ((target + sum) % 2 == 1) return 0; // 此时没有方案
        int bagSize = (target + sum) / 2;
        
        //1.dp定义:dp[i][j]表示背包容量为j,前i个元素放满有dp[i][j]种方法
        vector<vector<int>> dp(nums.size(), vector<int>(bagSize + 1, 0));
        //2.递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - nums[i]];
        //3.初始化
        // 初始化最上行
        if (nums[0] <= bagSize) 
        {
            dp[0][nums[0]] = 1; 
        }
        // 初始化最左列,最左列其他数值在递推公式中就完成了赋值
        dp[0][0] = 1; 
        int numZero = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 0) numZero++;
            dp[i][0] = (int) pow(2.0, numZero);
        }

        //4.遍历,从上往下
        for(int i = 1; i < nums.size();  ++i)
        {
            for(int j = 0; j <=bagSize; ++j)
            {
                if(j < nums[i])
                {
                    dp[i][j] = dp[i - 1][j];
                }
                else
                {
                    dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];
                }
            }
        }
        return dp[nums.size() - 1][bagSize];
    }
};
相关推荐
jarvisuni1 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu1 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_7981 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭2 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶2 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z2 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯2 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频
我命由我123452 小时前
棘轮效应极简理解
经验分享·学习·职场和发展·产品运营·求职招聘·职场发展·学习方法
天才测试猿2 小时前
实例介绍:Unittest框架及自动化测试实现流程
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例