题目:
代码:
class Solution {
public:
int combinationSum4(vector<int>& nums, int target)
{
vector<int> dp(target + 1, 0);
dp[0] = 1;
for (int i = 0; i <= target; i++)
{
for (int j = 0; j < nums.size(); j++)
{
if (i < nums[j]) continue;
dp[i] = (dp[i] >= INT_MAX - dp[i - nums[j]]) ? INT_MAX : dp[i] + dp[i - nums[j]];
}
}
return dp[target];
}
/*bool halfsearch(vector<int>& nums, int target,int begin,int end){
int half=(begin+end)/2;
if(begin==end&&nums[begin]!=target) return false;
if(nums[half]==target) return true;
else if(nums[half]>target) return halfsearch(nums,target,begin,half-1);
else return halfsearch(nums,target,half+1,end);
}
int combinationSum4(vector<int>& nums, int target) {
if(nums.size()==0) return 0;
if(target<nums[0]) return 0;
int dp[target+4];
sort(nums.begin(),nums.end());
dp[1]=halfsearch(nums,1,0,nums.size()-1)?1:0;
for(int i=2;i<=target;i++){
dp[i]=halfsearch(nums,i,0,nums.size()-1)?1:0;
for(int j=1;j<i;j++){
if(halfsearch(nums,target-j,0,nums.size()-1)){
dp[i]+=dp[j];
}
}
}
return dp[target];
}*/
};