【题目描述】

在古埃及,人们使用单位分数的和(形如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

【源程序】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 200+5;
const int dx[] = {-1,1,0,0,-1,-1,1,1};
const int dy[] = {0,0,-1,1,-1,1,-1,1};
using namespace std;LL maxDeep;
LL temp[N];
LL res[N];
LL GCD(LL a,LL b){return b==0?a:GCD(b,a%b);
}
bool judge(LL step){//当最小分数分母比原来大进行更新if(res[step]==-1)return true;else if(temp[step]>res[step])return false;else if(temp[step]<res[step])return true;elsereturn false;
}
LL getLimit(LL x,LL y){for(LL i=2;;i++)if(y<x*i)// 1/i<=x/yreturn i;
}
bool dfs(LL step,LL minn,LL x,LL y){if(step==maxDeep){if(y%x)return false;else{temp[step]=y/x;if(judge(step))//存在更优解,更新答案memcpy(res,temp,sizeof(temp));return true;}}minn=max(minn,getLimit(x,y));//取得新下界,注意这里取的是max(分母),以防止漏除枚举。bool flag=false;for(LL i=minn;;i++){if((maxDeep-step+1)*y<=x*i)//剪枝,(maxDeep-step+1)*(1/i)<=x/ybreak;temp[step]=i;LL ny=y*i;LL nx=x*i-y;LL gcd=GCD(nx,ny);if(dfs(step+1,minn+1,nx/gcd,ny/gcd))flag=true;}return flag;
}
int main(){LL n,m;scanf("%lld%lld",&n,&m);for(maxDeep=1;;maxDeep++){LL limit=getLimit(n,m);memset(temp,0,sizeof(temp));memset(res,-1,sizeof(res));if(dfs(0,limit,n,m))//找到第一个可行解即退出break;}for(LL i=0;i<=maxDeep;i++)printf("%lld ",res[i]);return 0;
}

埃及分数(信息学奥赛一本通-T1444)相关推荐

  1. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  2. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  3. 【信息学奥赛一本通】题解大全

    信息学奥赛一本通网站:点击这里 [语言及算法基础篇] 第一部分:C++语言 第一章:C++语言入门 T1000    入门测试题目      点击这里 T1001    Hello,World!    ...

  4. 信息学奥赛一本通(题解目录)

    信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...

  5. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  6. 信息学奥赛一本通 第五版(C++版)

    信息学奥赛一本通 第五版(C++版)第一部分 C++语言 第一章 C++语言入门 第二节 C++语言程序设计 P15 1. 编写一个能够输出Hello,World!的程序,这个程序常常作为一个初学者接 ...

  7. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  8. 信息学奥赛一本通T1447:靶形数独

    信息学奥赛一本通T1447:靶形数独 [题目描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向Z ...

  9. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

最新文章

  1. ironpython console是否可以卸载_IronPython的第十块鳞片
  2. bilateral filter双边滤波器的通俗理解
  3. 死磕java_死磕JavaScript-垃圾收集机制
  4. firefox-Developer开发者站点——关于Object.create()新方法的介绍
  5. Verilog二选一数据选择器
  6. SpringMVC注解 @initbinder 解决类型转换问题
  7. redis aof 备份和恢复_Redis 持久化机制的介绍,了解这些流程很重要
  8. 拳王虚拟项目公社:网上比较容易挣到钱方式?虚拟资源项目是赚钱的最佳选择
  9. Flutter 常见问题总结
  10. 网络通信数据处理过程
  11. 利用Quartz2D--context绘制矩形
  12. 秒秒钟解决打开ps图片显示无法完成请求,因为程序错误
  13. 小米更新显示非官方rom_MIUI官改篇对比分析-极光ROM-台湾W大-星空未来-其他官改官网...
  14. ubuntu中安装pdf虚拟打印机
  15. ue4 计算向量夹角
  16. 读书分享 《如何阅读一本书》|检视阅读
  17. Java简易图书DVD管理系统
  18. 破译营销最优解,2018E-UP效果营销案例大赛终审完美收官
  19. PAMTRI:用于车辆重新识别的姿势感知多任务学习
  20. 一. Linux基础

热门文章

  1. Java(五)异常处理,异常参数,自定义异常,嵌套异常
  2. Keras入门必读教程:手把手从安装到解决实际问题
  3. Adidas、金拱门、KFC、乐天玛特,零售巨头的选址秘诀都在数据里了
  4. 为什么俄罗斯不怕芯片卡脖子?
  5. 虚拟机:请问我刚刚回收的对象是干垃圾还是湿垃圾?|文末送书
  6. 程序员管理思维修炼,只需要反复阅读本篇
  7. memcached学习笔记1(windows 7 64bit 环境下安装memcached)
  8. JeeWx 微信开发公开课(Jeewx-API 专题),今晚8点不见不散
  9. 总结PLSQL的快捷键以及使用技巧
  10. C语言基础总结Part