动态规划动态规划

377. Combination Sum IV

2016-12-05  本文已影响0人  yangqi916

本题发现用dfs是要超时的,看了别人的答案发现是要dp。

对于nums = {1,2}, target = 3.

#include<vector>
#include<algorithm>
#include<cstdio>
#include <unordered_map>
#include <cmath>
using namespace std;

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        
        // ans = dp[target]
        vector<int> dp(target + 1);
        
        sort(nums.begin(), nums.end());
        
        int sizeOfNums = (int)nums.size();
        
        //
        dp[0] = 1;
        
        for (int i = 1; i <= target; i++)
        {
            dp[i] = 0;
            for (int j = 0; j < sizeOfNums; j++)
            {
                if (i- nums[j] >= 0)
                {
                    dp[i] += dp[i - nums[j]];
                }
                else
                {
                    // if i- nums[j] < 0
                    break;
                }
            }
        }

        return dp[target];
    }
};
上一篇 下一篇

猜你喜欢

热点阅读