动态规划整合(持续更新)
子集合问题
叙述:求解一个数target是否可以由nums集合里面的数的和构成,元素可重复使用
public boolean repetion(int target, int nums[]) {boolean dp[] = new boolean[target + 1];// dp起点dp[0] = true;for (int i = 0; i <= target; i++) {if (dp[i]) {for (int num : nums) {if (i + num == target) return true;else if (i + num < target) dp[i + num] = true;}}}return dp[target];}
子集合问题.II (元素不可重复使用)
叙述:求解一个数target是否可以由nums集合里面的数的和构成,元素不可重复使用 -> 0-1背包
public boolean unique(int target, int nums[]){boolean dp[] = new boolean[target + 1];// dp起点dp[0] = true;// num变为外层循环,因为每个数只能用一遍。for(int num:nums){// 倒着减,避免刚刚被更新为true的j又去更新j+num,导致num使用多次for(int j = target;j-num>=0;j--){dp[j] = dp[j-num];}}return dp[target];}