描述
童童有一个魔法书架,书架的层数无限多,但每一层最多只能放 k 本书,每层的有效高度由放在这层中最高的那本书决定。如果某一层不放书,则认为这层的有效高度为 0。如果将 n 本书放入书架,每层最多放 k 本,让有效的总高度尽可能的小,这个最小总高度是多少?
例如一共有 4 本书,每本书的高度分别是 4、5、2、3,书架每层最多放 3 本书,要让放书之后的总高度最小那就是高度 4、5、3 放一层,高度 2 再放一层,一共放了两层,总高度就是 5+2=7。
现在输入 n 本书,每层最多能放 k 本书,请编写程序帮童童算一算最小高度是多少?
输入描述
共两行。
第一行,2 个正整数 n 和 k,表示有 n本书,每层最多可以放 k本书,数与数之间以一个空格隔开。
第二行,n 个正整数,分别表示每本书的高度(每本书的高度不超过100),数与数之间以一个空格隔开。
输出描述
一行,一个整数,最小总高度。
样例输入 1
6 5 3 4 2 6 5 1
样例输出 1
7
提示
数据范围与提示
1≤n≤100000,1≤k≤100000
#include<bits/stdc++.h>
using namespace std;
int n,k,sum=0;
int a[100005];
int main(){
cin>>n>>k;
for(int i=1;i<=n;++i){
cin>>a[i];
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
for(int i=1;i<=n;++i){
if(i%k==1) sum+=a[i];
}
cout<<sum;
}