埃及分数

埃及分数,题目参考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类型,再次提交,总算成功了。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值