题解 | #分割等和子集#
分割等和子集
https://www.nowcoder.com/practice/65ade309fa4d4067a9add749721bfdc0
01背包
逆序遍历
一维数组
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] nums = new int[n]; int sum = 0; int maxnum = 0; for (int i = 0; i < n; i++) { nums[i] = in.nextInt(); sum += nums[i]; maxnum = Math.max(maxnum, nums[i]); } if (sum % 2 != 0 || maxnum > sum / 2) { System.out.println("false"); return; } int target = sum / 2; boolean[] dp = new boolean[target + 1]; dp[0] = true; for (int i = 0; i < n; i++) { for (int j = target; j >= nums[i]; j--) { dp[j] = dp[j] | dp[j - nums[i]]; } } System.out.println(dp[target]); } }