一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
2013-08-31 17:06
615 查看
一个整数数组,长度为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} m=3 所以m 的最大值为3。
#include <stdio.h> bool function_core(int *a, int n, int m, int groupsum, int *group, int goal, int groupid) { if(goal < 0) return false; if(goal == 0) { groupid++; goal = groupsum; if(groupid == m+1) return true; } for(int i=0;i<n;i++) { if(group[i]) continue; group[i] = groupid; if(function_core(a,n,m,groupsum,group,goal-a[i],groupid)) return true; group[i] = 0; } return false; } int function(int *a, int n) { int sum = 0,i; int *group = new int ; for(i=0;i<n;i++) { sum += a[i]; } for(int m=n; m>=2; m--) { if(sum%m != 0) continue; for(i=0;i<n;i++) group[i] = 0; group[0] = 1; if(function_core(a,n,m,sum/m,group,sum/m-a[0],1))//只需判断数组第一个元素分组情况,如果第一个元素无法分组,说明这个m是无效的 { printf("分组情况:\n"); for(i=0;i<n;i++) printf("%d\t",group[i]); printf("\n"); delete [] group; group = NULL; return m; } } return 1; } int main() { int a[] = {2, 6, 4, 1, 3, 9, 7, 5, 8, 10}; int n = sizeof(a)/sizeof(int); printf("数组为:\n"); for(int i=0;i<n;i++) printf("%d\t",a[i]); printf("\n"); printf("最大分组数为:%d\n",function(a,n)); return 0; }
相关文章推荐
- 【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 每日一道算法题:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为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
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
- 一个整数数组,长度为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
- 算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数组,长度为 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} m=3 所以m的最大值是3
- 45一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使得各分的和相等
- 一个整数组,长度为 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}