class Solution {
  //题目限制很少,可以重复且排列不同也算,那么每一层递归时,数组全部需要检测,
public:
    int ans = 0;
    int combination(vector<int>& nums, int target) {
        dp(nums, target, 0);
        return ans;
    }

    void dp(vector<int>& nums, int target, int curr){
        if(curr > target)return;
        if(curr == target){
            ++ans;
            return;
        }

        for(int i=0; i<nums.size(); ++i){
            dp(nums, target, curr+nums[i]);
        }
    }
};