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]);
    }
};
相关推荐
123过去17 分钟前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
深圳市快瞳科技有限公司23 分钟前
低空经济下,鸟类识别算法与无人机硬件的兼容性优化策略
算法·无人机
努力中的编程者35 分钟前
二叉树(C语言底层实现)
c语言·开发语言·数据结构·c++·算法
鹤旗1 小时前
While语句,do-while语句,for语句
java·jvm·算法
qq_416018721 小时前
高性能密码学库
开发语言·c++·算法
NAGNIP1 小时前
一文搞懂卷积神经网络经典架构-LeNet
算法·面试
宵时待雨1 小时前
C++笔记归纳14:AVL树
开发语言·数据结构·c++·笔记·算法
NAGNIP1 小时前
一文搞懂深度学习中的池化!
算法·面试
山川行1 小时前
关于《项目C语言》专栏的总结
c语言·开发语言·数据结构·vscode·python·算法·visual studio code