UVA1374-Power Calculus(迭代加深搜索)
Problem UVA1374-Power Calculus
Accept:323 Submit:2083
Time Limit: 3000 mSec
Problem Description

Input
The input is a sequence of one or more lines each containing a single integer n. n is positive and less than or equal to 1000. The end of the input is indicated by a zero.
Output
Your program should print the least total number of multiplications and divisions required to compute xn starting with x for the integer n. The numbers should be written each in a separate line without any superfluous characters such as leading or trailing spaces.
Sample Input
Sample Ouput
0
6
8
9
11
9
13
12
题解:IDA*算法,思路很直接,剪枝也很明显,就是如果目前最大的数,在接下来的几轮迭代中如果每次都翻倍还到不了n就剪枝。
还有一个神奇的剪枝就是每次都要利用到最后生成的那个数(不知道为啥)。
我一开始使用set进行集合操作,但是多了个log就让效率崩了,13层的就很难输出了,看了lrj的代码改成数组效率大大提高,以后在注重效率的地方还是尽量少用STL。
这个题让我比较困惑的是在代码中如果没有当 d == maxd 时return false;就会出现神奇的错误,而前几道IDA*的题目在这一点上都不太重要,冥思苦想,大概知道为啥了。
前几道类似的题目不会出现d超过maxd还能继续递归下去的情况(由估价函数可以清楚看到),但是这个题不一样,从估价函数中可以看到(见代码),这样的情况是完全可能出现的,因此可能这次递归开始设置的阈值是10,但是到10没停下来,继续深度递归,然后返回true导致程序误以为在这个阈值时正好搜索到结果,输出错误结果,这个点以后一定要注意,或者干脆每次写都加上这句,对效率应该不会有大的影响,理解不对的地方请大佬指教。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <set> using namespace std; const int maxn = ; int n,maxd;
int a[maxn+]; bool dfs(int d) {
if (a[d] == n) return true;
if (d == maxd) return false; int Max = a[];
for (int i = ; i <= d; i++) {
Max = Max > a[i] ? Max : a[i];
}
if ((Max << (maxd - d)) < n) return false; for (int i = d; i >= ; i--) {
a[d + ] = a[d] + a[i];
if (dfs(d + )) return true;
a[d + ] = a[d] - a[i];
if (dfs(d + )) return true;
}
return false;
} int main()
{
//freopen("input.txt", "r", stdin);
while (scanf("%d", &n) == && n) {
if (n == ) {
printf("0\n");
continue;
}
memset(a, , sizeof(a));
a[] = ;
for (maxd = ;; maxd++) {
if(dfs()) break;
}
printf("%d\n", maxd);
}
return ;
}
UVA1374-Power Calculus(迭代加深搜索)的更多相关文章
- UVA1374-Power Calculus(迭代加深搜索)
Problem UVA1374-Power Calculus Accept:107 Submit:584 Time Limit: 3000 mSec Problem Description In ...
- POJ 3134 Power Calculus (迭代剪枝搜索)
题目大意:略 题目里所有的运算都是幂运算,所以转化成指数的加减 由于搜索层数不会超过$2*log$层,所以用一个栈存储哪些数已经被组合出来了,不必暴力枚举哪些数已经被搜出来了 然后跑$iddfs$就行 ...
- UVA-1374 Power Calculus (迭代加深搜索)
题目大意:问最少经过几次乘除法可以使x变成xn. 题目分析:迭代加深搜索. 代码如下: # include<iostream> # include<cstdio> # incl ...
- 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解
废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...
- Power Calculus UVA - 1374 迭代加深搜索
迭代加深搜索经典题目,好久不做迭代加深搜索题目,拿来复习了,我们直接对当前深度进行搜索,注意剪枝,还有数组要适当开大,因为2^maxd可能很大 题目:题目链接 AC代码: #include <i ...
- 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 ...
随机推荐
- Elasticsearch系列(2):安装Elasticsearch(Linux环境)
系统环境 操作系统:CentOS 6.9 Elasticsearch:6.2.2 Filebeat:6.2.2(收集IIS日志) Kibana:6.2.2 Java:Java 8 注意:elk最好选择 ...
- mac svn的使用
一.概述 在windows下,我们常常用TortoiseSVN管理svn代码.在mac下,自带svn客户端和服务器端功能. 二.服务端:创建代码仓库,用来存储客户端所上传的代码 (1)创建svn代码存 ...
- 2018-11-27 中文代码示例之Programming in Scala笔记第七八章
续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档 ...
- Linux 进程调度的主要策略
1.Linux 下进程分为5种类别,分别是停止类.截止类.实时类.公平类.空闲类, 每种类别都有一个运行队列,每次调度时,就是先按照类别优先级排序,再按照每个类别内的最高优先级任务调度运行. 文件:c ...
- Python_关于多线程下变量赋值取值的一点研究
关于多线程下变量赋值取值的一点研究 by:授客 QQ:1033553122 1.代码实践1 #!/usr/bin/env python # -*- coding:utf-8 -*- __author_ ...
- (C#)IP地址与数字地址相互转换
站长网IP查询地址:http://tool.chinaz.com/ip/ 和ip地址转换为数字的工具地址:http://www.msxindl.com/tools/ip/ip_num.asp 可以看到 ...
- 被遗弃的depends2.2,替换解决方案——VS命令行
vs的早期版本提供了depends工具,最新版本是2.2,已经不再更新了,网站是dependencywalker.com. 现在,我们可以使用vs开发人员命令行,dumpbin工具,导出二进制文件的信 ...
- 2019年Web前端入门的自学路线
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文.本文内容不定期更新. 我前几天写过一篇文章:<裸辞两个月,海投一个月 ...
- Django + Uwsgi + Nginx 实现生产环境部署
本节内容 uwsgi 介绍 uwsgi安装使用 nginx安装配置 django with nginx 如何在生产上部署Django? Django的部署可以有很多方式,采用nginx+uwsgi的方 ...
- Google开源GSON的使用
* 谷歌开原项目GitHub地址:https://github.com/google/gson 1.新建一个maven项目,引入gson的dependency坐标依赖以及commons-io的坐标: ...