埃及分数-迭代加深
来源:互联网 发布:紫色水离子淘宝店名字 编辑:程序博客网 时间:2024/05/16 06:08
题目描述 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都大。
样例输入 Sample Input
19 45
样例输出 Sample Output
5 6 18
#include<cstdio>#include<cstring>#include<iostream>using namespace std;long long s[10001],ans[10001],i,a,a1,b1,b,tmp;long long gcd(long long x1,long long y1){ while (y1%x1!=0) { long long tmp=x1; x1=y1%x1; y1=tmp; } return x1;}void out(){ if (ans[i]>s[i]) { for (long long j=1;j<=i;j++) ans[j]=s[j]; }}long long dfs(long long x,long long y,long long d){ if (d==i) { s[d]=y; if (x==1&&s[d]>s[d-1]) out(); } else { for (long long j=max(s[d-1]+1,y/x+1);j<(i-d+1)*y/x;j++) { b=y*j/gcd(y,j); a=b/y*x-b/j; tmp=gcd(a,b); a=a/tmp; b=b/tmp; s[d]=j; dfs(a,b,d+1); } }}int main(){ scanf("%lld%lld",&a1,&b1); tmp=gcd(a1,b1); a1/=tmp; b1/=tmp; for (i=2;;i++) {// memset(s,0,sizeof(s)); ans[1]=0; s[0]=0; ans[i]=99999999; dfs(a1,b1,1); if (ans[1]!=0) break; } for (long long j=1;j<=i;j++) printf("%lld ",ans[j]);}
1 0
- 埃及分数-迭代加深
- 埃及分数 迭代加深搜索 IDS
- 迭代加深搜索 埃及分数
- 埃及分数,迭代加深搜索
- [NEFU 358] 埃及分数 [迭代加深]
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜)
- 埃及分数题解[迭代加深搜索]
- 埃及分数(迭代加深搜索)
- 迭代加深搜索(埃及分数)
- 迭代加深搜索与埃及分数
- 埃及分数问题(迭代加深搜索)
- 埃及分数 迭代加深搜索 IDA*
- 埃及分数(迭代加深搜索)
- 迭代加深搜索--埃及分数
- [codevs1288]埃及分数 迭代加深搜索
- 埃及分数 (迭代加深入门)
- css +号选择器
- nginx普通哈希表
- Android 网络框架_常用的网络框架
- 设计模式之原型模式
- 在聊蜂鸣器
- 埃及分数-迭代加深
- 运算放大器带宽的讨论
- NOIP2015信息传递
- 原来Chrome自带的开发者工具还能这么用!
- 我的C/C++库理解之memchr
- bzoj 1057: [ZJOI2007]棋盘制作 (dp+悬线法)
- App研发录
- 项目分析の电源
- 调试利器console.log的用法