LintCode 563.Backpack V (M)
A solution set is:
[7]
[1, 3, 3] public int backPackV(int[] nums, int target) {
int n = nums.length;
if(n == 0 || target <= 0) return 0;
// first i elements can fill j capcity in dp[i][j] ways
// dp[i][j]
int[][] dp = new int[n+1][target+1];
//dp[0][...] = 0;
//dp[...][0] = 1;
for(int i = 0; i<= n; i++)
{
dp[i][0] = 1;
}
for(int j = 0; j<= target; j++)
{
dp[0][j] = 0;
}
dp[0][0] = 1;
for(int i = 1; i<= n; i++)
{
for(int j = 1; j<= target; j++)
{
if(j-nums[i-1] >=0)
{
dp[i][j] = dp[i-1][j]+ dp[i-1][j-nums[i-1]];
}else
{
dp[i][j] = dp[i-1][j];
}
}
}
return dp[n][target];
}Last updated