java P1626 象棋比赛

题目描述
有N个人要参加国际象棋比赛,该比赛要进行K场对弈。每个人最多参加两场对弈,最少参加零场对弈。每个人都有一个与其他人不相同的等级(用一个正整数来表示)。

在对弈中,等级高的人必须用黑色的棋子,等级低的人必须用白色的棋子。每个人最多只能用一次黑色的棋子和一次白色的棋子。为增加比赛的可观度,观众希望K场对弈中双方的等级差的总和最小。

比如有7个选手,他们的等级分别是30,17,26,41,19,38,18,要进行3场比赛。最好的安排是选手2对选手7,选手7对选手5,选手6对选手4。此时等级差的总和等于(18-17)+(19-18)+(41-38)=5达到最小。

输入格式
第一行两个正整数N,K

接下来有N行,第i行表示第i-1个人等级。

[数据规模]

在90%的数据中,1≤N≤3000;

在100%的数据中,1≤N≤100000;

保证所有输入数据中等级的值小于100000000,1≤K≤N-1。

输出格式
在第一行输出最小的等级差的总和。

输入输出样例

输入 #1

7 3
30
17
26
41
19
38
18

输出 #1

5

import java.util.*;

public class Main {

	public static void main(String[] args) {
		Main m = new Main();
		m.handleInput();
	}

	int n = 0, m = 0, s = 0;
	int[] a = new int[100005];
	int[] b = new int[100005];

	public void handleInput() {
		Scanner in = new Scanner(System.in);

		n = in.nextInt();
		m = in.nextInt();

		for (int i = 0; i < n; i++) {
			a[i] = in.nextInt();
		}
		Arrays.sort(a, 0, n);
		for (int i = 0; i < n - 1; i++) {
			b[i] = a[i + 1] - a[i];
		}
		Arrays.sort(b, 0, n - 1);
		for (int i = 0; i < m; i++) {
			s += b[i];
		}
		System.out.println(s);
	}

}
发布了87 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/104631130
今日推荐