问题描述
有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。
输入格式
第一行两个整数N,M。
一行N个整数,表示木棍的长度。
输出格式
一行一个整数,表示最小的差距
样例输入
3 2
10 20 40
样例输出
10
数据规模和约定
N, M<=7
解题思路:比较n与m的大小,分情况讨论
若n=m,木棍原有的数量与要获得数量相同,此时用长度最长减去长度最短为所求结果
若n<m,不符合题意
若n>m,则新建s数组存放前m根长度的木棍,我们得到m根木棍,在此基础上将剩余木棍长度加在s中长度最短的那根木棍上,进行排序,保证剩余木棍永远加在s中长度最短的木棍上
#include<bits/stdc++.h>
using namespace std;
int n,m;
bool cmp(int x,int y){
return x>y;
}
int main(){
cin>>n>>m;
int a[n];
int s[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,cmp);
if(m>n){
cout<<a[0]-0<<endl;
}
else if(m==n){
cout<<a[0]-a[n-1]<<endl;
}
else{
for(int i=0;i<m;i++){
s[i]=a[i];
}
for(int i=m;i<n;i++){
s[m-1]=s[m-1]+a[i];
sort(s,s+m,cmp);
}
cout<<s[0]-s[m-1]<<endl;
}
return 0;
}
/*
5 3
5 6 7 8 2
*/