题解 | 分割等和子集
分割等和子集
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");
}
}
查看14道真题和解析