Leetcode Hot100 第25题 494.目标和---转背包问题

cpp 复制代码
class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int target) {
        // p+s=sum
        // p-s=target
        // p = (sum+target)//2
        // 从背包(nums)里选出target为(sum+target)//2的方案数,从而转换成背包问题
        for(int num:nums){
            target+=num;
        }
        if(target%2 != 0) return 0;
        if(target<0) return 0;
        target = target/2;
        /*****递归解法*******/
        // return dfs(nums,nums.size()-1,target);
        /*****递归解法*******/

        /*****DP数组循环解法*******/
        vector<vector<int>> dp(nums.size()+1,vector<int>(target+1));
        dp[0][0] = 1;
        for(int i=1;i<=nums.size();i++){
            for(int j=0;j<=target;j++){
                if(j-nums[i-1] < 0) dp[i][j] = dp[i-1][j];
                else dp[i][j] = dp[i-1][j] + dp[i-1][j-nums[i-1]];
            }
        }
        return dp[nums.size()][target];
    }
    int dfs(vector<int>& nums, int i, int c){
        if(i < 0){
            if(c==0) return 1;
            else return 0;
        }
        if(c-nums[i] < 0) return dfs(nums,i-1,c);
        return dfs(nums,i-1,c) + dfs(nums,i-1,c-nums[i]);
    }
};
相关推荐
roman_日积跬步-终至千里1 分钟前
【模式识别与机器学习(4)】主要算法与技术(中篇:概率统计与回归方法)之线性回归模型
算法·机器学习
小李小李快乐不已4 分钟前
图论理论基础(2)
java·开发语言·c++·算法·图论
点云SLAM6 分钟前
四元数 (Quaternion)微分-单位四元数 q(t) 的导数详细推导(10)
算法·计算机视觉·机器人·slam·imu·四元数·单位四元数求导
学学学无无止境6 分钟前
力扣-颠倒二进制位
leetcode
秋邱7 分钟前
2025 年突破性科技:大模型驱动的实时多模态数据流处理系统
人工智能·科技·算法·机器学习
sin_hielo8 分钟前
leetcode 2141
数据结构·算法·leetcode
qq_4335545411 分钟前
C++ 最长单调子序列
c++·算法·图论
youngee1113 分钟前
hot100-39二叉树层序遍历
数据结构·算法
深蓝电商API14 分钟前
爬虫请求参数签名算法逆向(md5、aes、rsa、sm2 全套)
爬虫·算法·状态模式
未可知77714 分钟前
软件设计师(下午题2)、UML与设计模式
算法·设计模式·职场和发展·uml