埃及分数

来源:互联网 发布:鞋店数据分析 编辑:程序博客网 时间:2024/04/27 17:41

埃及分数,题目参考http://acm.fjnu.edu.cn/show?problem_id=1341

题目:

在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数。
如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。
对于一个分数a/b,表示方法有很多种,但是哪种最好呢?
首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。
如:

19/45=1/3 + 1/12 + 1/180

19/45=1/3 + 1/15 + 1/45

19/45=1/3 + 1/18 + 1/30,

19/45=1/4 + 1/6 + 1/180

19/45=1/5 + 1/6 + 1/18.

最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。

给出a,b(0〈a〈b〈1000),编程计算最好的表达方式。

 

想法:

使用IDA*算法实现,按照分母从小到大的顺序搜索,外加剪枝。测试了几组数据,感觉是正确的。开始时提交显示TLE。于是我将动态创建的vecotr,改成在创建时就分配。然后再接再厉,结果提交了几次都是Wrong Answer,真是郁闷。先贴上来,改天再想!

 

 

后记:

无意间测试了一组数据,发现进入死循环,经过排查,发现是数据精度的问题,如果只用int,那么就会溢出,从而变成负数。

所以使用了double类型,再次提交,总算成功了。