50,779
社区成员
发帖
与我相关
我的任务
分享
package 搜索;
import java.util.Arrays;
import java.util.Scanner;
public class 木棒 {
static int n,sum,len;
static int[] w;
static boolean[] vis;
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
while ((n=sc.nextInt ())!=0){
w=new int[n];
vis=new boolean[n];
sum=0;len=1;
for (int i = 0; i < n; i++) {
w[i]=sc.nextInt ();
sum+=w[i];
len=Math.max (len,w[i]);
}
Arrays.sort (w);
reverse (w);
while (true){
if (sum%len==0&&dfs(0,0,0)){
System.out.println (len);
break;
}
len++;
}
}
}
public static boolean dfs(int u,int cur,int start){
if (u*len==sum){
return true;
}
if (cur==len){
return dfs (u+1,0,0);
}
for (int i=start;i<n;i++){
if (vis[i]||cur+w[i]>len) continue;
vis[i]=true;
if (dfs (u,cur+w[i],i+1))return true;
vis[i]=false;
/*if (cur==0){
return false;
}*/
if (cur+w[i]==len)return false;
int j=i;
while (j<n&&w[j]==w[i])j++;
i=j-1;
}
return false;
}
public static void reverse(int[] a){
int l=0,r=a.length-1;
while (l<r){
int temp=a[r];
a[r--]=a[l];
a[l++]=temp;
}
}
}