题目描述 Description

在古埃及,人们使用单位分数的和(形如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),编程计算最好的表达方式。

输入描述 Input Description

a b

输出描述 Output Description

若干个数,自小到大排列,依次是单位分数的分母。

样例输入 Sample Input

19 45

样例输出 Sample Output

5 6 18

/*感觉自己写的和正解完全不一样,我是枚举的答案的最小公倍数,无情的WA了,原因是数据太大,最小公倍数太大。正解是迭代加深直接搜答案,但是左右边界边界确定的特别巧妙。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 1010
#define ll long long
using namespace std;
ll n,m,flag,ans[N],q[N];
ll Ceil(double x)
{return (ll)(x+0.999999);
}
ll gcd(ll a,ll b)
{if(!b)return a;return gcd(b,a%b);
}
void dfs(ll a,ll b,ll t,ll limit)
{ll c=gcd(a,b);a/=c;b/=c;if(t==limit){if(a==0&&(!flag||(flag&&q[t-1]<ans[t-1]))){for(ll i=0;i<limit;i++)ans[i]=q[i];flag=1;}return;}ll l=Ceil(double(b)/double(a));//左边界 ll r=Ceil((double(limit)-double(t))/(double(a)/double(b)));//右边界 for(ll i=max(l,q[t-1]+1);i<=r;i++){if(flag&&i>ans[limit-1])return;q[t]=i;dfs(a*i-b,b*i,t+1,limit);q[t]=0;}
}
int main()
{cin>>n>>m;for(ll i=1;i<=20;i++){dfs(n,m,0,i);if(flag){for(ll j=0;j<i;j++)cout<<ans[j]<<" ";break;}}return 0;
}

转载于:https://www.cnblogs.com/harden/p/5994465.html

埃及分数(codevs 1288)相关推荐

  1. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第三题:埃及分数

    标题:埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比如 ...

  2. 埃及分数The Rotation Game骑士精神——IDA*

    IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...

  3. 埃及分数问题(带乐观估计函数的迭代加深搜索算法-IDA*)

    #10022. 「一本通 1.3 练习 1」埃及分数 [题目描述] 在古埃及,人们使用单位分数的和(形如 $\dfrac{1}{a}​$​​ 的,$a$ 是自然数)表示一切有理数.如:$\dfrac{ ...

  4. 华为机试HJ82:将真分数分解为埃及分数

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将 ...

  5. 埃及分数怎么计算java_贪心算法之埃及分数问题(附c++源代码)

    感谢博主提供算法思路http://blog.csdn.net/tterminator/article/details/50927393 博主的是java代码,在这里写个c++代码,只是牛客网中有些很无 ...

  6. 埃及分数问题+迭代加深搜索

    理论上可以用回溯法求解,但是解答树非常恐怖,其一深度没有明显上限,1/i的值似乎可以在枚举不断更大的i时越来越小:其二加数的选择在理论上无限制. 解决方案采用迭代加深搜索:从小到大枚举深度上限maxd ...

  7. python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本

    小编没什么好礼物送给大家的,这里有几本超低折扣的几本书,分享给你,为您省点小钱,不谢哟!此书单中,Python书有6本,少儿编程书4本,人工智能书2本.哪一本是你的菜,自己选吧! 文中这几本书折扣价在 ...

  8. 埃及分数拆分——IDA*

    埃及分数问题 题意 分析 思路 参考 代码 题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理  数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中 ...

  9. 贪心算法——埃及分数问题

    贪心算法之埃及分数问题 查看全文 http://www.taodudu.cc/news/show-6309464.html 相关文章: 2017清华大学计算机考研机试答案(含代码) mysql与mys ...

  10. 贪心:将真分数用埃及分数之和表示

    任务描述 本关任务:设计一个算法,把一个真分数 F 表示为埃及分数之和的形式. 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取真分数再进行编程. 测试说明 平 ...

最新文章

  1. (C++)堆排序的3个关键函数
  2. 别人总结的批处理技巧
  3. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
  4. 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
  5. Java坦克大战 (一) 之产生一个窗口
  6. UVA 839 Not so Mobile
  7. Spark-shell 脚本批量执行命令,命令行批量执行命令
  8. neon浮点运算_ARM 浮点运算详解
  9. LIB和DLL的区别与使用
  10. flask v0.1 flask.py
  11. 医疗机构被勒索软件攻击的可能性是金融机构的114倍
  12. 为什么mvc里面的ModelState.IsValid一只都是true
  13. SQL面试题(1-10)oracle写的
  14. 关于web中的自适应布局
  15. 调制方式演变(二)--DQPSK,4 /π​-DQPSK,FSK,MSK
  16. Web笔记:jQuery的使用
  17. 华为数通网络自动化开发学习笔记
  18. 计算机发展史与程序员思维
  19. Nuxt SSR 部署实践
  20. 安卓键 adb shell input keyevent code

热门文章

  1. 强大的 pdf 编辑器 —— Acrobat
  2. Launch Image Source
  3. A fully managed website and blog hosting platform
  4. 全文目录和全文索引的关系
  5. SQL Server性能优化案例报告
  6. maven 按业务拆分模块_gradle|springboot+gradle多模块化应用
  7. php 怎么查看原生方法源码_你的2020搜索账单地址入口 你的2020搜索账单怎么查看查看方法...
  8. Java虚拟机专题之字节码指令(读书笔记)
  9. (62)Verilog HDL模块例化system Verilog模块
  10. 27.Qt操作sqlite3数据库