题解 | #牛牛的数组匹配#
牛牛的数组匹配
https://www.nowcoder.com/practice/3d3406f4a7eb4346b025cc592be5b875
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
// 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int total = 0;
while((a--)>0)total+=in.nextInt();
int[] arr = new int[b];
for(int i=0;i<b;i++)arr[i]=in.nextInt();
int minStart=0,minDelta=total;
int[][] dp = new int[b][2];
for(int i=0;i<b;i++){
int sum = arr[i];
//dp[i][0] = total-arr[i];
if(i==b-1||total-sum<=0)dp[i][1]=i;
else{
for(int j=i+1;j<b;j++){
if(sum+arr[j]<total){
sum+=arr[j];
if(j==b-1)dp[i][1] = j;
else
continue;
}else if(sum+arr[j]==total){
sum+=arr[j];
dp[i][1] = j;
break;
}else{//dp[i][0]+arr[j]>total
int m =sum+arr[j]-total;
int n = total-sum;
if(m>=n){
dp[i][1] = j-1;
break;
}else{
sum+=arr[j];
dp[i][1] = j;
break;
}
}
}
}
dp[i][0] = Math.abs(total-sum);
if(dp[i][0]<minDelta){
minDelta = dp[i][0];
minStart = i;
}
}
for(int i = minStart;i<=dp[minStart][1];i++)System.out.print(arr[i]+" ");
}
}

