题解 | 分割等和子集
分割等和子集
https://www.nowcoder.com/practice/65ade309fa4d4067a9add749721bfdc0
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] arr = new int[n]; int sum = 0; for(int i=0;i<n;++i){ arr[i] = in.nextInt(); sum += arr[i]; } if(sum%2==1){ System.out.println("false"); return; } sum /= 2; int[] dp = new int[sum+1]; Arrays.fill(dp, Integer.MIN_VALUE); dp[0] = 0; for(int i=0;i<n;++i){ for(int j=sum;j>=arr[i];--j){ dp[j] = Math.max(dp[j], dp[j-arr[i]]+arr[i]);// 价值等于重量的背包问题 } } if(dp[sum]<0) System.out.println("false"); else System.out.println("true"); } }