问题描述
有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小
。
输入格式
第一行两个整数N,M。
一行N个整数,表示木棍的长度。
输出格式
一行一个整数,表示最小的差距
样例输入
3 2
10 20 40
样例输出
10
数据规模和约定
N, M<=7
package base; import java.util.Arrays; import java.util.Scanner; public class Main { static int n; static int m; static int[] stick; static int len[]; static int l[]; static int min=Integer.MAX_VALUE; public static void main(String[] args) { Scanner sc=new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); stick=new int[n]; for(int i=0;i<n;i++) { stick[i]=sc.nextInt(); } len=new int[m]; l=new int[m]; f(0); System.out.println(min); } public static void f(int step) { if(step==n) { for(int i=0;i<m;i++) { if(len[i]==0)return; l[i]=len[i]; } Arrays.sort(l); min=Math.min(min,l[m-1]-l[0]); return; } for(int j=0;j<m;j++) { len[j]+=stick[step]; f(step+1); len[j]-=stick[step]; } } }