求高人帮忙解决算法

glutton 2010-04-13 12:55:35
已知有如下几个数:10.80 23.30 18.00 32.00 15.50

已知和为50.80

要求输出所有可能相加因子的组合

例如此例应输出 18.00 32.00 10.80

ps:相加因子数目不限
...全文
122 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
glutton 2011-12-31
  • 打赏
  • 举报
回复
这帖子都忘了...不好意思了,其实excel里面有定制的宏的,动态规划算法,很好用,多谢各位,结贴
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
占个沙发
一会写
glutton 2010-04-13
  • 打赏
  • 举报
回复
实际应用的时候对时间性能要求不高,但是要求精确度,呵呵
libitum_1 2010-04-13
  • 打赏
  • 举报
回复
看起来很麻烦啊 以前没写过。 关注中。
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
那你记得大概的时间复杂度么
看能不能给点提醒
我给你的那个方法只是做了一些适量的剪枝,一点小小的优化而已
glutton 2010-04-13
  • 打赏
  • 举报
回复
往上顶啊...明天再加一百分,嘿嘿
都怪上学的时候没好好听,记得曾经听过的...
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 eonianglutton 的回复:]
要改成java滴,呵呵
还有这只是说明问题,实际情况要比这个复杂,其中某个因子可能是千万级数据(可能某个因子为1000万),实际中因子也会达到几十个
[/Quote]
懒得改了 呵呵 也就是个穷举而已
等高手看有啥好方法么
glutton 2010-04-13
  • 打赏
  • 举报
回复
要改成java滴,呵呵
还有这只是说明问题,实际情况要比这个复杂,其中某个因子可能是千万级数据(可能某个因子为1000万),实际中因子也会达到几十个
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
指定数量也能提高一个量级的时间复杂度
本例中除了穷举真不好想别的什么好方法
献丑了
坐待高手
James.Ji 2010-04-13
  • 打赏
  • 举报
回复
可能用二叉树之类的能好一些,但是一时想不明白,记得看过类似的题目
liu_siat 2010-04-13
  • 打赏
  • 举报
回复
已知有如下几个数:10.80 23.30 18.00 32.00 15.50

已知和为50.80,要求输出所有可能相加因子的组合
本来就是一个用来作为算法入门的小例子,对于此题,可能性也很少
穷举法的小例子
James.Ji 2010-04-13
  • 打赏
  • 举报
回复
除了穷举没想出好的方法,继续等高人
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
呀 忘了JAVA区了
用改成JAVA的么
keeya0416 2010-04-13
  • 打赏
  • 举报
回复

#include "stdio.h"
#define MAX_NUM 100
#define DEQUAL(a,b) (fabs((a)-(b)) < 1e-6)

//输入数组
double numbers[MAX_NUM];
//输入数组大小
int size;
//第i个数起到末尾的和
double sum[MAX_NUM];
//第i位的数字是否选择上
int flag[MAX_NUM];
//数字的和
double total;
//当前累加的和
double currentSum;


//输入初始化操作
void Input()
{

}

//根据flag数组输出选择上的数
void Output()
{

}


void DFS(int depth)
{

if(depth == size || currentSum+sum[depth] < total)return;
if(DEQUAL(currentSum+numbers[depth],total))
{
flag[depth] = 1;
Output();
flag[depth] = 0;
}
else if(currentSum+numbers[depth] < total)
{
currentSum += numbers[depth];
flag[depth] = 1;
DFS(depth+1);
flag[depth] = 0;
currentSum -= numbers[depth];
}
DFS(depth+1);
}

int main()
{
return 0;
}
Dazzlingwinter 2010-04-13
  • 打赏
  • 举报
回复
建议用有序数组来存放,然后套用背包问题的算法
keeya0416 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhingliu 的回复:]
關注中
[/Quote]
别关注呀 搞得我有压力
knightzhuwei 2010-04-13
  • 打赏
  • 举报
回复
这个好像是背包问题嘛
zhingliu 2010-04-13
  • 打赏
  • 举报
回复
關注中
havemydream 2010-04-13
  • 打赏
  • 举报
回复
穷举法。。。

62,624

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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