一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
2014-11-14 00:00
459 查看
一个整数数组,长度为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
比如{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 <iostream> using namespace std; int testShare(int *a,int n,int m,int sum,int groupSum,int *aux,int goal,int groupId) { if(goal < 0) return 0; if(goal == 0) { groupId++; goal = groupSum; if(groupId == m+1) return 1; } for(int i = 0;i<n;i++) { if(aux[i] != 0) continue; aux[i] = groupId; if(testShare(a,n,m,sum,groupSum,aux,goal-a[i],groupId)) return 1; //如果不适合恢复 aux[i] = 0; } return 0; } int maxShare(int *a,int n) { int sum = 0; int *aux = new int ; for(int i = 0;i<n;i++) sum+=a[i]; for(int m = n;m>=2;m--) { if(sum%m!=0) continue; for(int i = 0;i < n;i++) { aux[i] = 0; } if(testShare(a,n,m,sum,sum/m,aux,sum/m,1)) { //打印分组情况 cout << endl<<"分组情况"<<endl; for(int i = 0;i< n;i++) cout << aux[i]<<" "; delete[] aux; aux = NULL; return m; } } } int main() { int a[] = {3,2,4,3,6}; //打印数组值 printf("数组的值:"); for (int i = 0; i < 5; i++) printf(" %d ", a[i]); printf("\n可以分配的最大组数为:%d\n", maxShare(a, 5)); system("pause"); return 0; }
相关文章推荐
- 一个整数数组,长度为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
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 每日一道算法题:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 45一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)
- 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m.(下)
- 一个整数数组,长度为n,将其分为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,4}{6} m=3 所以m的最大值是3