埃及分数(codevs 1288)
在古埃及,人们使用单位分数的和(形如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),编程计算最好的表达方式。
a b
若干个数,自小到大排列,依次是单位分数的分母。
19 45
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)相关推荐
- 2013年第四届蓝桥杯C/C++ A组国赛 —— 第三题:埃及分数
标题:埃及分数 古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比如 ...
- 埃及分数The Rotation Game骑士精神——IDA*
IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...
- 埃及分数问题(带乐观估计函数的迭代加深搜索算法-IDA*)
#10022. 「一本通 1.3 练习 1」埃及分数 [题目描述] 在古埃及,人们使用单位分数的和(形如 $\dfrac{1}{a}$ 的,$a$ 是自然数)表示一切有理数.如:$\dfrac{ ...
- 华为机试HJ82:将真分数分解为埃及分数
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将 ...
- 埃及分数怎么计算java_贪心算法之埃及分数问题(附c++源代码)
感谢博主提供算法思路http://blog.csdn.net/tterminator/article/details/50927393 博主的是java代码,在这里写个c++代码,只是牛客网中有些很无 ...
- 埃及分数问题+迭代加深搜索
理论上可以用回溯法求解,但是解答树非常恐怖,其一深度没有明显上限,1/i的值似乎可以在枚举不断更大的i时越来越小:其二加数的选择在理论上无限制. 解决方案采用迭代加深搜索:从小到大枚举深度上限maxd ...
- python埃及分数_送你一份低折扣书单,Python就占了6本,人工智能2本
小编没什么好礼物送给大家的,这里有几本超低折扣的几本书,分享给你,为您省点小钱,不谢哟!此书单中,Python书有6本,少儿编程书4本,人工智能书2本.哪一本是你的菜,自己选吧! 文中这几本书折扣价在 ...
- 埃及分数拆分——IDA*
埃及分数问题 题意 分析 思路 参考 代码 题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中 ...
- 贪心算法——埃及分数问题
贪心算法之埃及分数问题 查看全文 http://www.taodudu.cc/news/show-6309464.html 相关文章: 2017清华大学计算机考研机试答案(含代码) mysql与mys ...
- 贪心:将真分数用埃及分数之和表示
任务描述 本关任务:设计一个算法,把一个真分数 F 表示为埃及分数之和的形式. 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取真分数再进行编程. 测试说明 平 ...
最新文章
- (C++)堆排序的3个关键函数
- 别人总结的批处理技巧
- Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
- Java坦克大战 (一) 之产生一个窗口
- UVA 839 Not so Mobile
- Spark-shell 脚本批量执行命令,命令行批量执行命令
- neon浮点运算_ARM 浮点运算详解
- LIB和DLL的区别与使用
- flask v0.1 flask.py
- 医疗机构被勒索软件攻击的可能性是金融机构的114倍
- 为什么mvc里面的ModelState.IsValid一只都是true
- SQL面试题(1-10)oracle写的
- 关于web中的自适应布局
- 调制方式演变(二)--DQPSK,4 /π​-DQPSK,FSK,MSK
- Web笔记:jQuery的使用
- 华为数通网络自动化开发学习笔记
- 计算机发展史与程序员思维
- Nuxt SSR 部署实践
- 安卓键 adb shell input keyevent code
热门文章
- 强大的 pdf 编辑器 —— Acrobat
- Launch Image Source
- A fully managed website and blog hosting platform
- 全文目录和全文索引的关系
- SQL Server性能优化案例报告
- maven 按业务拆分模块_gradle|springboot+gradle多模块化应用
- php 怎么查看原生方法源码_你的2020搜索账单地址入口 你的2020搜索账单怎么查看查看方法...
- Java虚拟机专题之字节码指令(读书笔记)
- (62)Verilog HDL模块例化system Verilog模块
- 27.Qt操作sqlite3数据库