您的位置:首页 > 其它

一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}{6

2014-03-19 15:46 676 查看
public class max {

static int testmax(int[] a){
int sum=0;
int maxnum = 0;
int[] aux = new int[a.length];
for(int i=0;i<a.length;i++){
sum+=a[i];
}

for(int m=2;m<=a.length;m++){
for(int i=0;i<aux.length;i++){
aux[i] = 0;
}
if(sum%m!=0)
continue;
else{
if(TestShare(a,sum,sum/m,aux,m,sum/m,1)){
maxnum = m;
}
}
}

return maxnum;

}

private static boolean TestShare(int[] a, int sum, int sa,int[] aux, int m,int s, int gid) {
if(s==0){
gid++;
s=sa;//s变为0时,说明一遍的查找已经结束,现在是进行第二遍,所以要进行重新的初始化。
if(gid==m+1){
return true;
}
}

for(int i=0;i<aux.length;i++){
if(aux[i]==0&&a[i]<=sa){
aux[i]=gid;
if(TestShare(a, sum,sa, aux, m, s-a[i], gid)){
return true;
}
aux[i]=0;
}
}

return false;
}

public static void main(String[] args) {

int[] test = {3,2,4,3,6};

int num = testmax(test);

System.out.println(num);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐