dfs深度遍历搜索
import java.util.Scanner;
public class Main{
static int mm;
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int M=sc.nextInt();
int[] a=new int[N];
for(int i=0;i<N;i++) {
a[i]=sc.nextInt();
mm+=a[i];
}
int[] b=new int[M];
int[] c=new int[N];
//b 记录每根木棍长度,c记录木棍是否使用
fun(a,b,c,0,N,M);
System.out.print(mm);
}
public static void fun(int[] a,int[] b,int[] c,int k,int n,int m) {
if(k<n) {
for(int i=0;i<m;i++) {
if(c[k]==0) {
b[i]+=a[k];
c[k]=1;
fun(a,b,c,k+1,n,m);
c[k]=0;
b[i]-=a[k];
}
}
}else {
int max=b[0],min=b[0];
for(int i=0;i<m;i++) {
if(b[i]>max) {
max=b[i];
}
if(b[i]<min) {
min=b[i];
}
}
if(max-min<mm) {
mm=max-min;
}
}
}
}