关于最优分组的算法 现有N个小于50的数字。把他们分成若干组,每组中最多有M个数字,且每组中的数字之和不大于50。先求组数最少的分法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这儿有一个更优的方法: void fun() { 排序:按从大到小排成一列L; while(L非空) { 将L中从头开始取数并放到一个数组A中,直到总数加上下一个数的和 大于或等于50停止;然后又从L最后往前取数到该数组A中,直到总数 加上下一个数的和大于或等于50停止。 } } 谢谢 I_Love_CPP ,我现在就用的是这个算法,在大部分情况下,都很好。在一下例子中效果就不是特别好:23 5 2 1 1 1 1 1 以上8个数字,如果每组最多4个数字,和最大不超过30,按此算法的出分组是{23 5 2},{1 1 1 1},{1}三组,而实际上最优是两组,{23 5 1 1},{1 1 1 2}。我想在此算法基础上应该再有一个优化算法,请高手指点! cab中INF文件的编写 cstring 出错 如何在自己创建的MENU中调用显示ABOUT窗体 已经经过高手指点了,但是我还是不懂,请大家继续指点(关于ADO从系统数据库中检索信息) 为什么会出现-1.#IND,1.#INF的东东?(20)在线急等 activeskin 在XP下的问题 关于VC中的资源使用问题。(WINDOW编程) 关于web browser控件的问题5 哪有星际争霸(任意版本)下载??? 用MFC开发小程序是用SDI模式或对话框模式? 能不能优先链接某个lib文件?? 请问如何更改另一个进程的的导入表呢?
void fun()
{
排序:按从大到小排成一列L;
while(L非空)
{
将L中从头开始取数并放到一个数组A中,直到总数加上下一个数的和
大于或等于50停止;然后又从L最后往前取数到该数组A中,直到总数
加上下一个数的和大于或等于50停止。
}
}
23 5 2 1 1 1 1 1 以上8个数字,如果每组最多4个数字,和最大不超过30,按此算法的出分组是{23 5 2},
{1 1 1 1},{1}三组,而实际上最优是两组,{23 5 1 1},{1 1 1 2}。我想在此算法基础上应该再有一个优化算法,请高手指点!