一个整数数组,长度为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

来源:互联网 发布:淘宝信用分怎么看 编辑:程序博客网 时间:2024/04/28 19:37
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);}}


0 0
原创粉丝点击