题目大意:

给出一个真分数,把它分解成最少的埃及分数的和。同时给出了k个数,不能作为分母出现,要求解的最小的分数的分母尽量大。

分析:

迭代加深搜索,求埃及分数的基础上,加上禁用限制就可以了。具体可以参考一下紫书。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
typedef long long LL;
LL ans[],v[];
set<LL> s;
int maxd;
LL gcd(LL a,LL b)
{
return b?gcd(b,a%b):a;
}
typedef long long LL;
LL get_first(LL a,LL b)
{
return b/a+;
}
bool better(int d)
{
for(int i=d;i>=;i--)
if(v[i]!=ans[i])
return ans[i]==-||v[i]<ans[i];
return false;
}
bool dfs(int d,LL from,LL aa,LL bb)
{
if(d==maxd)
{
if(bb%aa) return false;
v[d]=bb/aa;
if(s.count(bb/aa)) return false; if(better(d)) memcpy(ans,v,sizeof(LL)*(d+));
return true;
}
bool ok=false;
for(LL i=max(from,get_first(aa,bb));;i++)
{
if(bb*(maxd+-d)<=i*aa)
break;
if(s.count(i)) continue;
v[d]=i;
LL b2=bb*i;
LL a2=aa*i-bb;
LL g=gcd(a2,b2);
if(dfs(d+,i+,a2/g,b2/g))
ok=true;
}
return ok;
}
int main()
{
int t,k;
LL a,b,num;
scanf("%d",&t);
for(int ii=;ii<=t;ii++)
{
s.clear();
scanf("%lld%lld%d",&a,&b,&k);
for(int i=;i<k;i++)
{
scanf("%lld",&num);
s.insert(num);
}
int ok=;
for(maxd=;;maxd++)
{
memset(ans,-,sizeof(ans));
if(dfs(,get_first(a,b),a,b))
{
ok=;break;
} }
printf("Case %d: %lld/%lld=",ii,a,b);
for(int i=;i<=maxd;++i){
if(i) printf("+");
printf("1/%lld",ans[i]);
}
printf("\n");
}
return ;
}

UVa 12558 - Egyptian Fractions (HARD version)的更多相关文章

  1. UVA12558 Egyptian Fractions (HARD version) (埃及分数,迭代加深搜索)

    UVA12558 Egyptian Fractions (HARD version) 题解 迭代加深搜索,适用于无上界的搜索.每次在一个限定范围中搜索,如果无解再进一步扩大查找范围. 本题中没有分数个 ...

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

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

  3. 【Uva 12558】 Egyptian Fractions (HARD version) (迭代加深搜,IDA*)

    IDA* 就是iterative deepening(迭代深搜)+A*(启发式搜索) 启发式搜索就是设计估价函数进行的搜索(可以减很多枝哦~) 这题... 理论上可以回溯,但是解答树非常恐怖,深度没有 ...

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

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

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

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

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

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

  7. UVA12558-Efyptian Fractions(HARD version)(迭代加深搜索)

    Problem UVA12558-Efyptian Fractions(HARD version) Accept:187  Submit:3183 Time Limit: 3000 mSec  Pro ...

  8. UVa 10814 - Simplifying Fractions

    题目大意:给一个分数,对其进行化简.因为分子.分母最大为1030,所以用要用大数. import java.io.*; import java.util.*; import java.math.*; ...

  9. 【例题 7-3 UVA - 10976】Fractions Again?!

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] x>=y => \(\frac{1}{x}<=\frac{1}{y}\) => \(\frac{1}{x}= ...

随机推荐

  1. GUID

    前言 全局唯一标识符,简称GUID(发音为 /ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA ...

  2. InLineHookSSDT

    //当Ring3调用OpenProcess //1从自己的模块(.exe)的导入表中取值 //2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层) //3进入R ...

  3. C++-const_cast, reinterpret_cast, static_cast的用法

    /////////////////////////////////////////////////////////////////////////////// // // FileName : cas ...

  4. vs 折叠跟展开所有方法。

    Ctrl + M + O: 折叠所有方法 Ctrl + M + M: 折叠或者展开当前方法 Ctrl + M + L: 展开所有方法

  5. VS2010中添加lib库引用

    VS2010中添加lib库引用: 1 菜单  项目---> 属性--->配置属性-->链接器---->输入---附加依赖项,  加入库名,如: my_API.lib; 或是在c ...

  6. Cisco IOS debug command reference Command A through D

    debug aaa accounting through debug auto-config debug aaa accounting : to display information on acco ...

  7. android baseApplication 基类

    package com.free.csdn.base; import java.io.File;import java.util.ArrayList;import java.util.List; im ...

  8. 100个iOS开发/设计面试题汇总

    常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS ...

  9. 防止忘记初始化NSMutableArray的方法

    在写项目的过程中,经常会遇到一些郁闷的事,往一个可变数组中添加一个模型数据时,经常会发现程序运行很正常,可是可变数组中就是没有任何数据,久病成医,我发现自己总是放一个错,就是NSMutableArra ...

  10. WEB-INF& 绝对路径vs相对路径

    在struts2里面用XXXInput方法和springmvc里面用GET模式进入添加或者登陆输入页面,有时候会在方法里面做一下准备,比如动态读入部门信息放在select中,或者在model中加入一个 ...