563. Backpack V 不重复使用

int backPackV(vector<int> &nums, int target) { // write your code here // 和coins不同之处是,这里每个元素只能用一次 const int size = nums.size(); if(size == 0 || target == 0){ return 0; } vector<vector<int>> dp(target + 1, vector<int>(size + 1, 0)); dp[0][0] = 1; for(int j = 1; j <= size; j++){ dp[0][j] = 1; } for(int i = 1; i <= target; i++){ for(int j = 1; j <= size; j++){ if(i >= nums[j - 1]){ dp[i][j] = dp[i - nums[j - 1]][j - 1] + dp[i][j - 1]; //这里是和coin change不一样的地方,dp[i - nums[j - 1]][j] //其实就可以转成一维数组了。[j]只和之前的j - 1有关。 } else{ dp[i][j] = dp[i][j - 1]; } } } return dp[target][size]; }

Comments

Popular posts from this blog

Amazon OA 763. Partition Labels

1427. Split Array into Fibonacci Sequence

05/25 周一