就一个dp,别想歪了
dp[i]表示组成数字i的种数
但这题是真坑。。结果保证int内,不代表中间数字在int内
class Solution { public: long long dp[10010]; int combinationSum4(vector<int>& nums, int target) { memset(dp, 0, sizeof(dp)); sort(nums.begin(), nums.end()); for(int i = 0; i < nums.size(); i++) dp[nums[i]] = 1; // cout << 11111 << endl; // dp[0] = 1; for(int i = 0; i <= target; i++) { for(int j = 0; j < nums.size() && nums[j] <= i; j++) { if(dp[i - nums[j]] > INT_MAX) continue; dp[i] += dp[i - nums[j]]; } } return dp[target]; } };