> 文章列表 > 动态规划整合(持续更新)

动态规划整合(持续更新)

动态规划整合(持续更新)

子集合问题

叙述:求解一个数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];}