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]);
    }
};
相关推荐
武子康13 分钟前
AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书
人工智能·爬虫·gpt·算法·机器学习·ai·音视频
闪电麦坤951 小时前
数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
数据结构·算法
suuijbd3 小时前
个人总结八股文之-基础篇(持续更新)
算法
2401_881244403 小时前
斐波那契数列------矩阵幂法
线性代数·算法·矩阵
机器学习与统计学3 小时前
阿里牛逼,又开源两个遥遥领先的模型(向量化、重排),知识库要翻天地覆了
算法
小河豚oO3 小时前
LeetCode刷题---贪心算法---944
算法·leetcode·贪心算法
【杨(_> <_)】3 小时前
信号处理分析工具——时频分析(一)
算法·matlab·信号处理
还不起来学习?3 小时前
常见算法题目5 -常见的排序算法
java·算法·排序算法
Once_day4 小时前
代码训练LeetCode(23)随机访问元素
算法·leetcode
小河豚oO4 小时前
LeetCode 热题 100 - 哈希 - 128
算法·leetcode·哈希算法