java 过60,剩下MLE,这题java怎么过啊
查看原帖
java 过60,剩下MLE,这题java怎么过啊
1096912
VXTW楼主2024/3/8 10:18
import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[][] status = new int[n][2];
		//初始化	
		for(int i = 0;i<n;i++)status[i][0] = in.nextInt();
		for(int i = 0;i<n;i++)status[i][1] = in.nextInt();
		//先排序
		Arrays.sort(status,(a,b)->Integer.compare(b[1], a[1]));
		//sum推销前缀和 pre之前最大距离 last之后最大(距离+推销)体力
		int[] last = new int[n];
		for(int i = n-1;i>=0;i--) {
			if(i!=n-1) {
				last[i] = Math.max(last[i+1],status[i][0]*2+status[i][1]);
			}else {
				last[i] = status[i][0]*2+status[i][1];
			}
		}
		status[0][0] *= 2;
		for(int i = 1;i<n;i++) {
			//status[i][0]充当pre
			status[i][0] = Math.max(status[i][0]*2,status[i-1][0]);
			//status[i][1]充当sum
			status[i][1] += status[i-1][1];
		}
		//打印结果
		for(int i = 0;i<n;i++) {
			if(i==0) {
				System.out.println(last[i]);
			}else {
				System.out.println(Math.max(status[i][0]+status[i][1],status[i-1][1]+last[i]));
			}
		}
	}
}
2024/3/8 10:18
加载中...