CodeVS 1288 迭代加深 解题报告
来源:互联网 发布:nginx 正则匹配 编辑:程序博客网 时间:2024/06/08 06:27
1288 埃及分数
题目描述 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
代码如下:
#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int l;long long ans[1005],tmp[1005];bool flg;void dfs(long long a,long long b,int lft){ if(lft==0) { if(a==0) { flg=1; if(tmp[l]<ans[l]) for(int i=1;i<=l;++i) ans[i]=tmp[i]; } return; } if((b*lft)/a>ans[l]||tmp[l-lft]>ans[l]) return; for(long long i=max(tmp[l-lft]+1,b/a);i<=(b*lft)/a;++i) { tmp[l-lft+1]=i; if(a*i<b) continue; dfs((a*i-b),i*b,lft-1); }}int main(){ long long a,b; scanf("%lld%lld",&a,&b); memset(ans,0x3f,sizeof(ans)); for(int i=1;;++i) { l=i; dfs(a,b,i); if(flg) { for(int j=1;j<=i;j++) printf("%lld ",ans[j]); printf("\n"); break; } } return 0;}
让我看到你们的双手
阅读全文
0 0
- CodeVS 1288 迭代加深 解题报告
- HDU 1560 迭代加深 解题报告
- Hdu 1560 解题报告 迭代加深搜索
- [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]
- Codevs 1288 埃及分数(迭代加深搜索)
- codevs 1288 埃及分数 迭代加深搜索
- codevs 1004 四子连棋 迭代加深搜索
- 一中OJ #1193 倒水问题[1] | IDDFS-迭代加深 + 二分猜答案 | 解题报告
- 【codevs 1288】【vijos P1308】埃及分数(迭代加深搜)
- 【sgu510】迭代加深
- 迭代加深+剪枝
- 迭代加深
- 迭代加深搜索
- 迭代加深
- 迭代加深搜索
- 搜索-迭代加深
- [CODEVS]数据结构系列 解题报告
- CODEVS 1022 覆盖 解题报告
- 新的开始
- float对内联元素和块元素的影响
- 编程第五十三天
- MSSQL:触发器
- 资源分享 | 摄影视频 | 杨最醉摄影视频(1-7)
- CodeVS 1288 迭代加深 解题报告
- 22 制作安装包,让用户安装程序
- 刷清橙OJ--A1036.分解质因数
- 数据结构之杨辉三角实现
- 04-JDBC学习手册:JDBC中使用transaction(事务)编程和Javabean定义
- 历届试题 城市建设
- [LeetCode]415. Add Strings(计算两个字符串表示的数字的和)
- Linux中MySQL中文乱码
- sublime 搭建 python 开发环境