动态规划中级教程 377. Combination Sum IV

来源:互联网 发布:男士风衣品牌 知乎 编辑:程序博客网 时间:2024/06/05 08:06

Given an integer array with all positive numbers and no duplicates, find the number of possible combinations that add up to a positive integer target.

Example:

nums = [1, 2, 3]target = 4The possible combination ways are:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)Note that different sequences are counted as different combinations.Therefore the output is 7.

Follow up:
What if negative numbers are allowed in the given array?
How does it change the problem?
What limitation we need to add to the question to allow negative numbers? 


dp【0】=1(啥也不加,一种方案)主要为了方便
dp【1】=dp【1-1】=1
dp【2】=dp【2-1】+dp【2-2】=2
dp【3】=dp【3-1】+dp【3-2】+dp【3-3】=4
dp【4】=dp【4-1】+dp【4-2】+dp【4-3】=7
class Solution {public:    int combinationSum4(vector<int>& nums, int target) {        int dp[target+1];        for(int i=0;i<=target;i++)        {            dp[i]=0;        }        dp[0]=1;        for(int i=0;i<=target;i++)        {            for(int j=0;j<nums.size();j++)            {                if(i-nums[j]>=0)                {                    if(dp[i-nums[j]])                    {                        dp[i]+=dp[i-nums[j]];                    }                }            }        }        return dp[target];    }};


原创粉丝点击