LeetCode 494. 目标和 (计数DP、01背包DP变种)

目标和

class Solution {
    
    
public:
    int findTargetSumWays(vector<int>& nums, int S) {
    
    
        if(S<-1000 || S>1000) return 0;
        int f[25][2010] = {
    
    0}, n = nums.size();
        f[0][map(nums[0])] += 1;
        f[0][map(-nums[0])] += 1;
        for(int i=1;i<n;i++){
    
    
            for(int s = nums[i];s<=2000;s++){
    
    
                f[i][s] += f[i-1][s-nums[i]];  
            }
            for(int s = 0;s<=2000-nums[i];s++){
    
    
                f[i][s] += f[i-1][s+nums[i]];
            }
        }
        return f[n-1][map(S)];
    }
    int map(int n){
    
    
        return n+1000;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/108934307