埃及分数问题_迭代加深搜索_C++
一、题目背景
http://codevs.cn/problem/1288/
给出一个真分数,求用最少的1/a形式的分数表示出这个真分数,在数量相同的情况下保证最小的分数最大,且每个分数不同。
如 19/45=1/3 + 1/12 + 1/180
二、迭代加深搜索
迭代加深搜索可以看做带深度限制的DFS。
首先设置一个搜索深度,然后进行DFS,当目前深度达到限制深度后验证当前方案的合理性,更新答案。
不断调整搜索深度,直到找到最优解。
三、埃及分数具体实现
我们用dep限制搜索层数,先从2开始,每次深度+1
搜索时每一层比上一层的分数小,即分母一次比一次大
每次枚举出 1/a 后,用当前分数减去,然后递归传递剩余的分数
每层搜索枚举的限制条件:
1、保证当前深度分母大于上一深度分母
2、枚举的1/a小于当前分数,不可能存在等于的状态,因为此种最优解会在限制深度较小的时候出现
3、设当前剩余分数为x/y,剩余深度为d,则 x/y<d/a → a<d/x*y。
不妨先设之后枚举的分母都为 a,那么最后也就刚好达到 x/y ,但又因分数不能相等,所以 a 必须小于该值,即把分数调大。如果分数很小,那么就永远够不着目标分数
当深度达到限制深度时,只需判断剩余的分数是否满足1/a的形式,然后更新结果
记得开long long ,使用%lld输出,因为通分的时候数据会很大
时间复杂度和搜索大致一致,因为当前限制深度的时间复杂度远大于上一次限制深度的时间复杂度,所以之前深度的时间可以忽略
优点是空间开支特别小
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 1000
using namespace std; long long ans[N],s[N],mo,ch;
int dep;
long long gcd(long long a,long long b){return b==?a:gcd(b,a%b);}
void outp()
{
int i;
if (ans[dep]>s[dep])
{
for (i=;i<=dep;i++)
{
ans[i]=s[i];
}
}
}
void dfs(long long x,long long y,int d)
{
long long a,b,i,w;
if (d==dep)
{
s[d]=y;
if ((x==)&&(s[d]>s[d-])) outp();
return;
}
for (i=max(s[d-]+,y/x+);i<(dep-d+)*y/x;i++)
{
b=y*i/gcd(y,i);
a=b/y*x-b/i;
w=gcd(a,b);
a/=w;
b/=w;
s[d]=i;
dfs(a,b,d+);
}
}
int main()
{
int i=,j;
scanf("%lld%lld",&ch,&mo);
i=gcd(ch,mo);
ch/=i;
mo/=i;
for (dep=;;dep++)
{
ans[]=;
s[]=;
ans[dep]=;
dfs(ch,mo,);
if (ans[]!=) break;
}
for (j=;j<=dep;j++)
{
printf("%lld ",ans[j]);
}
printf("\n");
return ;
}
版权所有,转载请联系作者,违者必究
QQ:740929894
埃及分数问题_迭代加深搜索_C++的更多相关文章
- vijos1308 埃及分数(迭代加深搜索)
题目链接:点击打开链接 题目描写叙述: 在古埃及.人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数.如:2/3=1/2+1/6,但不同意2/3=1/3+1/3,由于加数中有同样的.对于 ...
- UVA12558 Egyptian Fractions (HARD version) (埃及分数,迭代加深搜索)
UVA12558 Egyptian Fractions (HARD version) 题解 迭代加深搜索,适用于无上界的搜索.每次在一个限定范围中搜索,如果无解再进一步扩大查找范围. 本题中没有分数个 ...
- 埃及分数 迭代加深搜索 IDA*
迭代加深搜索 IDA* 首先枚举当前选择的分数个数上限maxd,进行迭代加深 之后进行估价,假设当前分数之和为a,目标分数为b,当前考虑分数为1/c,那么如果1/c×(maxd - d)< a ...
- [Vijos1308]埃及分数(迭代加深搜索 + 剪枝)
传送门 迭代加深搜索是必须的,先枚举加数个数 然后搜索分母 这里有一个强大的剪枝,就是确定分母的范围 #include <cstdio> #include <cstring> ...
- POJ1129Channel Allocation[迭代加深搜索 四色定理]
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14601 Accepted: 74 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 迭代加深搜索 POJ 1129 Channel Allocation
POJ 1129 Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14191 Acc ...
- 迭代加深搜索 codevs 2541 幂运算
codevs 2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出 ...
- HDU 1560 DNA sequence (IDA* 迭代加深 搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...
随机推荐
- 数据分析处理库Pandas——对象操作
Series结构 索引 修改 旧数据赋值给新数据,旧数据不变. 对某一数值进行修改,可以选择保留修改前或修改后的数值. 替换索引 修改某一个索引 添加 在数据1后添加数据2,数据1不改变. 添加一个数 ...
- python+scrapy环境搭建步骤描述
Python3(3.5.4)搭建爬虫系统步骤描述: 1.下载python安装包,路径:https://www.python.org/downloads/windows/ 选择3.5.4版本64位的安 ...
- CONDENSE命令により、文字列から冗長スペースが削除
CONDENSE 命令により.文字列から冗長スペースが削除されます. CONDENSE c [NO-GAPS]. この命令により.項目 c に先行空白が含まれる場合は削除され.その他の空白列がある場合 ...
- 笔记-python异常信息输出
笔记-python异常信息输出 1. 异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...
- 笔记-python-元类metaclass
笔记-python-元类metaclass 1. 元类 1.1. 类也是对象 class Person(object): pass 上面的代码会在内存中创建一个类,它也是对象, 可以将 ...
- JAVA-数组或集合
哈哈,今天我们来讲解一下有关于一些数组 或者是集合的知识点 1.ArrayList,LinkedList,Vector的区别 ArrayList,LinkedList,Vector都是实现List接口 ...
- 使用泛型类简化ibatis系统架构
jdk1.5的推出为我们带来了枚举.泛型.foreach循环.同步工具包等等好东西.其中,泛型的使用为我们的代码开发提供了很大的简便,简化了我们的代码. 1.设计思路 1)GenericDao泛型类提 ...
- TouTiao开源项目 分析笔记11 以总体到局部的思路 构建图片主列表
1.构建图片主列表的整体片段PhotoTabLayout 1.1.首先创建一个PhotoTabLayout片段 public class PhotoTabLayout extends Fragment ...
- linux上Kettle定时执行(转换的单步执行,job的单步执行,环境变量,kettle定时功能,效率问题等)转自(http://blog.csdn.net/feng19821209/article/details/5800960)
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
- 获取IMSI
转:http://letsunlockiphone.guru/find-imsi-number/ HOW TO FIND IMSI NUMBER (UPDATED) You probably alre ...