题目链接:https://cn.vjudge.net/problem/CodeForces-1006B
题意: n个分成m组 每组取最大,和最多
题解:先排序,取出m个最大的标记。
感谢pwj的大力支持 ,排序 从大到小 :和C排序相反
Arrays.sort(a, 1, n + 1, new Comparator<node>() {
public int compare (node n1, node n2) {
return (n1.x < n2.x)?1:-1;
}
});
import java.util.*;
import java.math.*;
public class Main {
static class node {
public int x, id;
node() {
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
node [] a = new node[2010];
int n = cin.nextInt();
int k = cin.nextInt();
int []vis = new int[2010];
for(int i = 1; i <= n; i++) {
a[i]=new node();
a[i].id = i;
a[i].x = cin.nextInt();
vis[i] = 0;
}
Arrays.sort(a, 1, n + 1, new Comparator<node>() {
public int compare (node n1, node n2) {
return (n1.x < n2.x)?1:-1;
}
});
int ans = 0;
for(int i = 1; i <= k; i ++) {
// System.out.println(a[i].x);
vis[a[i].id] = 1;
ans += a[i].x;
}
System.out.println(ans);
int i = 1;
ans = 0;
while(vis[i] == 0) {
i++;
ans++;
}
ans ++;
for(; i <= n; ) {
i++;
while(i <= n && vis[i] == 0) {
ans++;
i++;
}
System.out.print(ans + " " );
ans = 1;
}
}
}