45一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值

原创 2012年03月26日 17:56:16
45.雅虎(运算、矩阵):
1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)
某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
最大流
2.一个整数数组,长度为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<iostream>
using namespace std ;
//o(n!)全排列
int testShares(int a[], int n, int m, int sum, int groupsum, int aux[], int goal, int groupId) {
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 (testShares(a, n, m, sum, groupsum, aux, goal-a[i], groupId)) {
return 1;
}
aux[i] = 0;
}
return 0;
}
int maxShares(int a[], int n) {
int sum = 0;
int i, m;
int *aux=new int[n];
for (i=0; i<n; i++) sum += a[i];
for (m=n; m>=2; m--) {
if (sum%m != 0) 
continue;
for (i=0; i<n; i++) 
aux[i] = 0;
if (testShares(a, n, m, sum, sum/m, aux, sum/m, 1))
{
for (i=0; i<n; i++) 
cout<<aux[i]<<" ";
return m;
}
}
return 0;
}




int main()
{
int a[]={5,4,2,2,1};
cout<<maxShares(a,5);
return 1;
}

相关文章推荐

每日一道算法题:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值

题目:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。           比如{3,2,4,3,6}可以分为{3,2,4,3,6},     m = 1;          ...
  • jhyxss
  • jhyxss
  • 2014年12月08日 17:58
  • 408

一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值

本文代码参考网址:http://blog.csdn.net/v_july_v/article/details/6870251   问题描述:一个整数数组,长度为n,将其分为m 份,使各份的和相等,...

【微软谷歌面试100题--【45】一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值

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

一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值

划分为m块时,需要具备的条件: m的取值为1~n每一部分之和为 sum/m; (sum为数组元素之和)sum % m == 0,否则不可能平分 递归思想: 假设分为m块,每一...

算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值

.雅虎: 1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。 2.一个整数数组,长度...
  • ylf13
  • ylf13
  • 2013年11月05日 14:18
  • 1199

一个整数数组,长度为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 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}...

一个整数数组,长度为n,将其分为m份,使得各分的和相等

//题意: //一个整数数组,长度为n,将其分为m份,使得各分的和相等 //比如:{3,4,2,3,6}可以分成{3,2,4,3,6} m=1;或者 {3,6},{2,4,3} m=2; //{3,3...

C语言小试题:找出M行N列矩阵的行最大值,存入数组并输出。

输入M行N列的矩阵,求每一行的最大值,并按相应的次序将其存放到长度为M的一维数组中,然后输出。...

SGU275. To xor or not to xor(高斯消元求N个数中任取M个数求得异或最大值)

275. To xor or not to xor time limit per test: 0.25 sec. memory limit per test: 65536 KB in...
  • modiz
  • modiz
  • 2015年03月28日 10:15
  • 1020

【OJ】---M---对象数组求最大值

 题目要求如下: -------------------------------------------------------------------------------------...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:45一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
举报原因:
原因补充:

(最多只允许输入30个字)