其他分享
首页 > 其他分享> > [图论DFS][dp]leetcode494:目标和

[图论DFS][dp]leetcode494:目标和

作者:互联网

题目:
在这里插入图片描述

解题思路:
1)利用动态规划解题:

2)使用DFS穷举所有可能的情况,暴搜+剪枝

代码如下:

class Solution {
public:
    int findTargetSumWays(vector<int>& nums, int S) {
        /*解法1:利用dp*/
        /*
        int sum=0;
        for(auto num:nums)//求总和
            sum+=num;
        if(sum<S||(sum+S)%2==1)return 0;
        sum=(sum+S)/2;
        vector<int> dp(sum+1,0);//dp[i]表示重量i的情况数
        dp[0]=1;
        for(auto num:nums)//进行动态规划
            for(int i=sum;i>=num;--i)
                 dp[i] += dp[i-num];
        return dp[sum];
        */
        
        /*解法2:深度优先搜索+剪枝*/
        int result=0;
        DFS(nums,0,S,0,result);
        return result;
        
    }
    void DFS(vector<int>& nums,int index,int S,int sum,int& result)
    {
        int size=nums.size();
        if(size==index)//到达尾部,检查是否等于S
        {   
            if(sum==S)
                result+=1;
            return;
        }
        else if(index<size)
        {
            //穷举正负号
            DFS(nums,index+1,S,sum-nums[index],result);
            DFS(nums,index+1,S,sum+nums[index],result);
        }
    }
};

标签:nums,int,sum,DFS,num,result,leetcode494,dp
来源: https://blog.csdn.net/qq_43152052/article/details/99050592