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. 聊一聊 AngularJS 服务

    什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中使用. AngularJS 内建了30 多个服务. 为什么使用服务? 在很多服务中,比如 $loca ...

  2. PHP之数组函数归类

    数组之所以强大,除了本身声明.存储方式灵活,它还有坚强后盾:一系列功能各异的数组处理函数.就像一只军队,除了领队将军本身能征善战,指挥英明之外,还有一群不怕死.忠实于他的士兵,这样才能显得整体的强大. ...

  3. ASP伪静态页面(不需要通过iis+ISAPI_Rewrite)

    很简单的教程,献给喜欢SEO的朋友们. 不需要通过iis+ISAPI_Rewrite做基于IIS的url rewrite 一.数据库很简单使用ACCESS,Data.mdb建立一个表Article,三 ...

  4. 再探Linux动态链接 -- 关于动态库的基础知识

      在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...

  5. 【JAVA】final修饰Field

    一.简介 final修饰符可以用来修饰变量.方法.类.final修饰变量时一旦被赋值就不可以改变. 二.final成员变量 成员变量是随类初始化或对象初始化而初始化的.当类初始化的时候,会给类变量分配 ...

  6. IOS上iframe的滚动条失效的解决办法

    #iframe-wrap { position: fixed; top: 100px; bottom: 0px; left: 0px; right: 0px; -webkit-overflow-scr ...

  7. mysql 乱码问题处理

    出现乱码的问题,主要就是因为数据在被处理的过程中,出现了编码和解码不对应造成的.因此解决编码问题的方法也就是在通过让编码和解码的过程能够对应起来就OK了,大学的而是,记得经常搞这个问题,今天又碰到了m ...

  8. mysql---多表关联

    首先要介绍一下集合的概念:集合具有无序性.唯一性. 无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,只要元素值和元素个数相同则两个集合相等. 唯一性:指集合内部元素不存在值相等的元素. 上 ...

  9. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  10. 推荐:PHPCMS v9 安全防范教程!

    一.目录权限设置很重要:可以有效防范黑客上传木马文件. 如果通过 chmod 644 * -R 的话,php文件就没有权限访问了. 如果通过chmod 755 * -R 的话,php文件的权限就高了. ...