大家帮忙给想个算法吧。

Kshape 2007-01-19 10:46:05
有这么一组数据。
1
3
4
5
10
6
2
5
7
8
9
12
11
想把数据分成3组,每组的总和相差尽量要小。
注意的是:单个数据不能更改,也就是以前的每个数都是一个整体,如果直接平均的话,就可能出现这种以外情况。

多谢大家。
...全文
261 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kshape 2007-01-19
  • 打赏
  • 举报
回复
skfox(sky)
=============
如果我要分10组如何办呢?
Kshape 2007-01-19
  • 打赏
  • 举报
回复
也就是说,以前的数据比如只有2 5 7,分组后不能出现3,4之类的数据,并且以前的数据个数不能减少,以前有多少个数据,分组后也应该有多少个数据。。
OOPhaisky 2007-01-19
  • 打赏
  • 举报
回复
注意的是:单个数据不能更改,也就是以前的每个数都是一个整体
----------------------------------------------------------------------------------
这个要求没有看懂。。。
taodm 2007-01-19
  • 打赏
  • 举报
回复
穷举肯定能得到最佳解。
skfox 2007-01-19
  • 打赏
  • 举报
回复
1,求总和A,B=A/3
2,排序C1, C2...CMAX
3,C1+CMAX+C2+C(MAX-1)...
3.1按照这种方式累加,如果出现了累加值大于B,且最后一个累加的数据是靠前的(最后一个数据小于倒
数第二个数据)则进行第4步
3.2按照这种方式累加,如果出现了累加值大于B,且最后一个累加的数据是靠后的(最后一个数据大于倒
数第二个数据),则放弃最后一个累加的数据,改用顺序的方式累加,比如本来是...+C7+C100的时候超
过了B,则改成...+C7+C8+C9直到大于B
4,没有累加的数据再做一遍3的超作
5,剩下的就是第3组数据了
caocheng8230 2007-01-19
  • 打赏
  • 举报
回复
使用穷举法
jiangbin00cn 2007-01-19
  • 打赏
  • 举报
回复

设待排序数组a[3][n]

首先数据排序排序大在前小在后 data[n]

for(i=0;i<n;i++)
{
if( a[k]总和最小 ) a[k][p]=data[i];
}

这里写的不详细,领会精神就好

64,266

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧