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]; }