算法训练 粘木棍
问题描述
有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。
输入格式
第一行两个整数N,M。
一行N个整数,表示木棍的长度。
输出格式
一行一个整数,表示最小的差距
数据规模和约定
N, M<=7
代码:
#include <iostream>
#include<algorithm>
#include<map>
using namespace std;
int n,m;
int res=1e9;
int a[10],d[10];
void dfs(int x){
if(x==n){ //粘完了所有的木棍
int mn=d[0],mx=d[0];
for(int i=0;i<m;i++){
mn=min(mn,d[i]);
mx=max(mx,d[i]);
}
res=min(res,mx-mn);
}
else{
for(int j=0;j<m;j++){//粘第x根木棍,枚举粘在的位置
d[j]+=a[x];
dfs(x+1);
d[j]-=a[x];
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
dfs(0);
cout<<res<<endl;
return 0;
}