IDA* 就是iterative deepening(迭代深搜)+A*(启发式搜索)

启发式搜索就是设计估价函数进行的搜索(可以减很多枝哦~)

这题。。。

理论上可以回溯,但是解答树非常恐怖,深度没有明显上界,加数的选择理论上也是无限的。

我们可以从小到大枚举深度maxd,

设计估价函数,当扩展到第i层,前i个分数的和为c/d,第i的分数为1/e,接下来至少需要(a/b+c/d)/(1/e)个分数,如果超过maxd-i+1,那么直接回溯就好了。。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define LL long long
#define Maxn 1100 LL a,b;
LL maxd,ans[Maxn],v[Maxn]; bool qq[]; LL mymax(LL x,LL y) {return x>y?x:y;} bool better(LL d)
{
for(LL i=d;i>=;i--) if(v[i]!=ans[i])
{
return ans[i]==-||v[i]<ans[i];
}
return ;
} LL get_first(LL a,LL b)
{
for(LL i=;;i++)
{
if(b<=a*i) return i;
}
} LL gcd(LL a,LL b)
{
if(b==) return a;
return gcd(b,a%b);
} bool dfs(LL d,LL from,LL aa,LL bb)
{
if(d==maxd)
{
if(bb%aa) return ;
v[d]=bb/aa;
if(v[d]<=&&!qq[v[d]]) return ;
if(better(d)) memcpy(ans,v,sizeof(ans));
return ;
}
bool ok=;
from=mymax(from,get_first(aa,bb));
for(LL i=from;;i++)
{
if(i<=&&!qq[i]) continue;
if(bb*(maxd+-d)<=i*aa) break;
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=;
}
return ok;
} int main()
{
LL T,kase=;
scanf("%lld",&T);
while(T--)
{
scanf("%lld%lld",&a,&b);
memset(qq,,sizeof(qq));
LL k;
scanf("%lld",&k);
for(LL i=;i<=k;i++)
{
LL x;
scanf("%lld",&x);
qq[x]=;
}
for(maxd=;;maxd++)
{
memset(ans,-,sizeof(ans));
if(dfs(,get_first(a,b),a,b)) break;
}
printf("Case %lld: %lld/%lld=",++kase,a,b);
printf("1/%lld",ans[]);
for(LL i=;i<=maxd;i++) printf("+1/%lld",ans[i]);
printf("\n");
/*printf("%d\n",maxd);
for(LL i=1;i<=maxd;i++) printf("%d\n",ans[i]);*/
}
return ;
}

话说题目上的hard case我的程序也跑不出来。。。ORZ。。

2016-11-14 20:17:33

【Uva 12558】 Egyptian Fractions (HARD version) (迭代加深搜,IDA*)的更多相关文章

  1. UVa 12558 - Egyptian Fractions (HARD version)

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

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

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

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

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

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

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

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

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

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

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

  7. UVA - 11214 Guarding the Chessboard(迭代加深搜索)

    题目: 输入一个n*m的棋盘(n,m<10),某些格子有标记,用最少的皇后守卫(即占据或攻击)所有的标记的格子.输出皇后的个数. 思路: 一开始没有想到用迭代加深搜索,直接dfs结果还没写完就发 ...

  8. uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索

    迭代加深搜索 自己看的时候第一遍更本就看不懂..是非常水,但智商捉急也是没有办法的事情. 好在有几个同学已经是做过了这道题而且对迭代加深搜索的思路有了一定的了解,所以在某些不理解的地方询问了一下他们的 ...

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

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

随机推荐

  1. Rshare Pro是否可以放入至客户企业App Store?

    现在很多客户内部部署了苹果授权的企业内部的AppStore,我们的Rshare Pro 是完全允许放入企业搭建的AppStore平台中.但每份需要收费20美元,换成人民币是120元.

  2. 【C语言】02-基本数据类型

    跟其他语言一样,C语言中用变量来存储计算过程使用的值,任何变量都必须先定义类型再使用.为什么一定要先定义呢?因为变量的类型决定了变量占用的存储空间,所以定义变量类型,就是为了给该变量分配适当的存储空间 ...

  3. 对list集合中的对象进行排序(转载)

    原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...

  4. ubuntu中安装monodevelop

    sudo apt-get install monoDevelop sudo apt-get install build-essentialsudo apt-get install mono-devel ...

  5. Bootstrap使用心得

    久闻Twitter的Bootstrap框架强大且易用,近日为改版小丸工具箱的官网特地花了一周实践. 这篇文章总结我在使用Bootstarp中的一些关键点. 1.布局 Bootstrap框架的布局采用了 ...

  6. jquery个人笔记

    一.链式操作 <!DOCTYPE html> <html> <head> <title></title> <script src = ...

  7. JS学习之表格的排序

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 21_resultMap和resultType总结

    [resultType] [ 作用 ] 将查询结果按照SQL列名与pojo属性名一致性 映射到pojo中. [ 使用场合 ] 常见的一些明细记录的展示,比如用户购买商品的明细,将关联查询信息全部展示在 ...

  9. C语言 goto, return等跳转

    C语言 goto, return等跳转 Please don't fall into the trap of believing that I am terribly dogmatical about ...

  10. Project Israfil -- 支持多个音乐平台的开源音乐服务

    Israfil     |关于|当前进度|开发日志|下载软件|编译|参与项目|编译状态|版权|协议| LER0ever Project Israfil Provide Unified Music Se ...