UVA12558 Egyptian Fractions (HARD version)

题解

迭代加深搜索,适用于无上界的搜索。每次在一个限定范围中搜索,如果无解再进一步扩大查找范围。

本题中没有分数个数和分母的上限,只用爆搜绝对TLE。故只能用迭代加深搜索。

#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
typedef long long ll;
int num,T,t,k;
ll h[],ans[],a,b,q;
set <ll> del; //存储不能用的数
bool ok;
inline ll gcd(ll A,ll B) {return B ? gcd(B,A%B):A;}
inline bool better(){ //判断最优解
for(int i=num;i>=;--i)
if(h[i]!=ans[i])
return ans[i]==-||h[i]<ans[i];
return ;
}
inline void dfs(ll p1,ll p2,int last,int cnt){//p1/p2:分子/分母 last:这次从哪个分母开始搜 cnt:已经添加了几个子分数
if(cnt==num){
if(p2%p1||del.count(p2/p1)) return ; //分子不为1或者这个数被禁止出现
h[cnt]=p2; ok=;
if(better()) memcpy(ans,h,sizeof(ll)*(cnt+)); //更新最优解
return ;
}
for(ll i= last>p2/p1+ ? last:p2/p1+;;++i) // p2/p1+1:符合条件的最小分母,用于剪枝
{
if(p1*i>=p2*(num-cnt+)) break; //发现最后减不完了,跳出
if(del.count(i)) continue;
ll q1=p1*i-p2,q2=p2*i,G=gcd(q1,q2); //通分
h[cnt]=i;
dfs(q1/G,q2/G,i+,cnt+);
}
}
int main(){
scanf("%d",&T);
for(t=;t<=T;++t){
del.clear(); ok=;
scanf("%lld%lld%d",&a,&b,&k);
for(int i=;i<=k;++i) scanf("%lld",&q),del.insert(q);
for(num=;!ok;++num){ //限定范围
memset(ans,-,sizeof(ans));
dfs(a,b,b/a+,); //b/a+1同上p2/p1+1
}--num; //注意要减掉多出的一次++num操作
printf("Case %d: %lld/%lld=",t,a,b);
for(int i=;i<num;++i) printf("1/%lld+",ans[i]);
printf("1/%lld\n",ans[num]);
}
return ;
}

UVA12558 Egyptian Fractions (HARD version) (埃及分数,迭代加深搜索)的更多相关文章

  1. 埃及分数 迭代加深搜索 IDA*

    迭代加深搜索 IDA* 首先枚举当前选择的分数个数上限maxd,进行迭代加深 之后进行估价,假设当前分数之和为a,目标分数为b,当前考虑分数为1/c,那么如果1/c×(maxd - d)< a ...

  2. codevs 1288 埃及分数 (迭代加深搜索)

    题目大意:给你一个分数$a/b$,把它拆解成$\sum_{i=1}^{n}1/ai$的形式,必须保证$ai$互不相同的情况下,尽量保证n最小,其次保证分母最大的分数的分母最小 什么鬼玄学题!!! 因为 ...

  3. UVA12558 Egyptian Fractions (HARD version)(埃及分数)

    传送门 题目大意 给出一个真分数 a/b,要求出几个互不相同的埃及分数(从大到小),使得它们之和为 a/b (埃及分数意思是分子为1的分数,详见百度百科) 如果有多组解,则分数数量少的优先 如果分数数 ...

  4. uva12558 Egyptian Fractions (HARD version)(迭代深搜)

    Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...

  5. UVA-12558 Egyptian Fractions (HARD version) (IDA* 或 迭代加深搜索)

    题目大意:经典的埃及分数问题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> # i ...

  6. Vijos 1308 埃及分数 - 迭代加深

    描述 在古埃及,人们使用单位分数的和(形如1/a的, a是自然数)表示一切有理数.如:2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的.对于一个分数a/b,表示方法有很多种, ...

  7. 【习题 7-7 UVA-12558】Egyptian Fractions (HARD version)

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 枚举最大量maxdep 在dfs里面传剩余的要凑的分子.分母 以及上一次枚举的值是多少. 然后找到最小的k,满足1/ ...

  8. UVa 12558 - Egyptian Fractions (HARD version)

    题目大意: 给出一个真分数,把它分解成最少的埃及分数的和.同时给出了k个数,不能作为分母出现,要求解的最小的分数的分母尽量大. 分析: 迭代加深搜索,求埃及分数的基础上,加上禁用限制就可以了.具体可以 ...

  9. 埃及分数问题_迭代加深搜索_C++

    一.题目背景 http://codevs.cn/problem/1288/ 给出一个真分数,求用最少的1/a形式的分数表示出这个真分数,在数量相同的情况下保证最小的分数最大,且每个分数不同. 如 19 ...

随机推荐

  1. java.exe和javaw.exe有什么区别

  2. POJ-2329 Nearest number - 2(BFS)

    Nearest number - 2 Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4100 Accepted: 1275 De ...

  3. poj1066 Treasure Hunt【计算几何】

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8192   Accepted: 3376 Des ...

  4. poj3347 Kadj Squares【计算几何】

    Kadj Squares Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3594   Accepted: 1456 Desc ...

  5. HDU 6343 - Problem L. Graph Theory Homework - [(伪装成图论题的)简单数学题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  6. intel笔记本cpu型号后缀详解(M,U,QM,MQ,HQ,XM)

    M:笔记本专用CPU,一般为双核,M前面一位数字是0,意味着是标准电压处理器,如果是7,则是低电压处理器. U:笔记本专用低电压CPU,一般为双核,U前面一位数字为8,则是28W功耗的低压处理器(标准 ...

  7. address sizes : 46 bits physical, 48 bits virtual

    processor : 7vendor_id : GenuineIntelcpu family : 6model : 63model name : Intel(R) Xeon(R) CPU E5-26 ...

  8. JAVA 的wait(), notify()与synchronized同步机制

    转自:http://blog.csdn.net/zyplus/article/details/6672775 在JAVA中,是没有类似于PV操作.进程互斥等相关的方法的.JAVA的进程同步是通过syn ...

  9. ZB api

    本文介绍ZB api Rest API (已开启) ZB为用户提供了一个简单的而又强大的API,旨在帮助用户快速高效的将ZB交易功能整合到自己应用当中. 如果在使用过程中有任何问题,请加群764113 ...

  10. 2018/03/26 每日一个Linux命令 之 du

    昨天使用 df 查看了磁盘空间中所有的容量. 今天学习 du 查看目录或者文件的大小. du会显示指定的目录或文件所占用的磁盘空间. -- du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合 ...