Backpack VI
注意事项
The different sequences are counted as different combinations.
Given nums = [1, 2, 4]
, target = 4
class Solution {
public:
/**
* @param nums an integer array and all positive numbers, no duplicates
* @param target an integer
* @return an integer
*/
int backPackVI(vector<int>& nums, int target) {
// Write your code here
sort(nums.begin(),nums.end());
vector<int> dp(target+1, 0);
dp[0] = 1;
for(int i=0; i<=target; i++)
{
for(auto num : nums)
{
if(i >= num)
dp[i] += dp[i-num];
}
}
return dp.back();
}
};
思路:target从1开始逐步向后求可能的组合数。dp[i]指target为i时的组合数。
if(i >= num)
dp[i] += dp[i-num];
这一步是关键,因为i能拆分为num和i-num的值,所以由num+(i-num)可能的种类为dp[i-num]。