题解 | #牛牛的数组匹配#

牛牛的数组匹配

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]+" ");
           
        
    }
}

全部评论

相关推荐

2025-12-31 14:19
门头沟学院 产品经理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务