主题:[讨论]一个算法问题 谁能做?
sovf
[专家分:270] 发布于 2009-02-26 10:24:00
25.40 48.80 339 144 257 339.10 113.40 50.90
273.40 327.70 133.40 69.20 116 167.80 100.9 224.3 202.70 190 230.90 286.80 162.60 92.70 120.30 260.50 67.90 249.90 62.50
以上数字自由组合,但不能重复用使用,列出三个加法算式使其能得出1122.30、2001.50、1533.30
回复列表 (共7个回复)
沙发
sovf [专家分:270] 发布于 2009-02-26 10:32:00
没人挑战吗
板凳
deqin888 [专家分:0] 发布于 2009-02-27 19:52:00
升序排序,依次往上加,<继续,=输出一个结果,>指定的值就 跳到下一个数
3 楼
hust512 [专家分:70] 发布于 2009-03-01 22:35:00
哈哈, 很笨的方法就是设几重循环,都测试一下,
可能有较好的方法, 没想到!
4 楼
sovf [专家分:270] 发布于 2009-03-05 22:22:00
3楼怎么行
5 楼
yuzhouzhiwai [专家分:60] 发布于 2009-03-06 11:11:00
这个似乎是0-1背包dp问题啊
呵呵 用递归最方便的啦
6 楼
2786194403 [专家分:20] 发布于 2009-03-06 17:44:00
先说一个粗糙的算法:
构造一课深度为4的n叉树。用回溯法遍历。
可以先进行排序,这样可以构造出一个回溯条件。满足目标的的叶节点的路径可以判断出组合里的所有元素。
或者三个循环嵌套:
a[n]; b[n][3];
sum; m=0;
for(i=0,i<n,i++)
{b[m][0]=a[i];
for(j=i+1,j<n,j++)
{b[m][1]=a[j];
for(k=j+1,k<n,k++)
{b[m][2]=a[k];
if(b[m][0]+b[m][1]+b[m][2]==sum)
{m++;break}
}
}
}
7 楼
buptwhisper [专家分:10] 发布于 2009-03-13 18:09:00
请问你“组合”的意义
我来回复