UVA1374 IDA*
我刚开始的思路就是:用启发函数max * pow(2 , maxd - d) < n直接去判断,两个for循环往数组延伸,找到n为止,可是速度太慢。刘汝佳大哥说的直接使用新延伸出来的数,这样确实加快了,0秒过,可是他没有解释。
效率低的代码:
#include<cstring>
#include<cstdio>
#include<cmath>
const int maxn=4000+5;
int vis[maxn*2],res[maxn];
int n;
bool dfs(int d,int maxd,int cnt){
long long maxt=-1;
for(int i=1;i<=cnt;++i)
if(maxt<res[cnt]) maxt=res[cnt];
if(d>maxd||maxt*pow(2,maxd-d)<n) return false; //启发函数
if(res[cnt]==n) return true;
for(int i=1;i<=cnt;++i)
for(int j=1;j<=cnt;++j){
int t1=res[i]+res[j]; //加法
if(!vis[t1]) {
vis[t1]=1;
res[cnt+1]=t1;
if(dfs(d+1,maxd,cnt+1)) return true;
vis[t1]=0;
}
int t2=res[i]-res[j]; //减法
if(t2>0&&!vis[t2]) {
vis[t2]=1;
res[cnt+1]=t2;
if(dfs(d+1,maxd,cnt+1)) return true;
vis[t2]=0;
}
}
return false;
}
int main(){
res[1]=1;
while(scanf("%d",&n)==1&&n){
memset(vis,0,sizeof(vis));
vis[1]=1;
for(int maxd=0;;++maxd){
if(dfs(0,maxd,1)) {
printf("%d\n",maxd);
break;
}
}
}
return 0;
}
贴出这个代码,是提供一个正常思路。
AC代码
#include<cstring>
#include<cstdio>
#include<cmath>
const int maxn=100+5;
int vis[maxn*1000],res[maxn];
int n;
bool dfs(int d,int maxd,int cnt){
int maxt=-1;
for(int i=1;i<=cnt;++i)
if(maxt<res[cnt]) maxt=res[cnt];
if(d>maxd||maxt*pow(2,maxd-d)<n) return false; //启发函数
if(res[cnt]==n) return true;
for(int i=cnt;i>0;--i){
int t1=res[cnt]+res[i];//加法
if(!vis[t1]){
vis[t1]=1;
res[cnt+1]=t1;
if(dfs(d+1,maxd,cnt+1)) return true;
vis[t1]=0;
}
int t2=res[cnt]-res[i];
if(t2>0&&!vis[t2]){
vis[t2]=1;
res[cnt+1]=t2;
if(dfs(d+1,maxd,cnt+1)) return true;
vis[t2]=0;
}
}
return false;
}
int main(){
res[1]=1;
while(scanf("%d",&n)==1&&n){
memset(vis,0,sizeof(vis));
vis[1]=1;
for(int maxd=0;;++maxd){
if(dfs(0,maxd,1)) {
printf("%d\n",maxd);
break;
}
}
}
return 0;
}
如有不当之处欢迎指出!
UVA1374 IDA*的更多相关文章
- UVa 1374 快速幂计算(dfs+IDA*)
https://vjudge.net/problem/UVA-1374 题意:给出n,计算最少需要几次能让x成为x^n(x和已经生成的数相乘或相除). 思路:IDA*算法. 如果当前数组中最大的数乘以 ...
- 逆向工程 - Reveal、IDA、Hopper、HTTPS抓包 等
目录: 一. iOS 如何做才安全 二.ipa文件 三.沙盒 中的数据 四.Reveal:查看 任何APP 的UI结构 五.反编译工具:IDA 六.反编译工具:Hopper Disassembler ...
- IDA的脚本IDC的一个简单使用
目的:主要是想学习一下IDA的IDC的脚本的使用.这里做了一个小的测试. 这里使用的是VS2015Community来生成文件的. 一.编写测试程序: 这里先生成我们的目标数据. 然后编写测试程序.得 ...
- 安卓动态调试七种武器之孔雀翎 – Ida Pro
安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...
- iOS程序逆向Mac下常用工具——Reveal、HopperDisassemble、IDA
原文在此 一.Reveal 1 一般使用 Reveal是ITTY BITTY发布的UI分析工具,可以很直观的查看App的UI布局.如下图所示: Reveal是需要付费的,需要89美元, ...
- IDA插件栈字符串识别插件
该插件是一款可以自动识别栈上局部变量为字符串的插件,字符串形式如下,并自动的加上注释 如图:可以自动识别栈上的字符串 项目主 ...
- Android动态方式破解apk进阶篇(IDA调试so源码)
一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...
- 计算机病毒实践汇总六:IDA Pro基础
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. IDA使用 (1)搜索.下载并执行IDA Pro,对可执行程序lab05-01.dll进行装载,分别以图形 ...
- IDA在内存中dump出android的Dex文件
转载自http://drops.wooyun.org/tips/6840 在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非 ...
随机推荐
- centos7创建新用户
创建新用户 创建一个叫xiaoming的用户: [root@192 ~]# adduser xiaoming 为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略: [root@192 ...
- 自己写的日志框架--linkinLog4j--实现基本的框架功能
OK,上面一步我们已经知道了日志框架的必要性,然后我们也对比了直接不用日志框架来记录日志的种种弊端.现在我们开始就来一步一步的实现自己的日志框架. 大体的思路如下: 1,实现多种日志级别,通过设值不同 ...
- junit4X系列--Runner解析
前面我整理了junit38系列的源码,那junit4X核心代码也基本类似.这里我先转载一些关于junit4X源码解析的好文章.感谢原作者的分享.原文地址:http://www.blogjava.net ...
- Linux指令--rm, rmdir
rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变.rm是一个危险的命令,使用的时 ...
- linkin大话面向对象--GC和jar包
GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- Asp.net core 2.0.1 Razor 的使用学习笔记(五)
按说这里应该写关于Role角色类的笔记,但是我还没时间实验这块,所以等以后我搞定了再来分享.现在先写其他部分. Asp.net core 2.0.1 Razor 的使用学习笔记——建立模型 按照微软官 ...
- 3.移植驱动到3.4内核-移植DM9000C驱动
在上章-使内核支持烧写yaffs2,裁剪内核并制作补丁了 本章,便开始移植以前2.6内核的驱动到3.4新内核 1.介绍 首先内核更新,有可能会重新定义新的宏,去除以前的宏,以前更改函数名等 所以移植驱 ...
- ArcGIS License启动无响应
根据对网上的总结以及个人的经验,首先建议关闭电脑的防火墙以及杀毒软件 如果点击启动,依然没有反应,建议在dos下进行启动,命令为: lmgrd -z -c service.txt 如果需要深入研究,可 ...
- iOS-常用三方工具
#菜单 pod 'LGSideMenuController' # 刷新 pod 'MJRefresh' # 网络请求 pod 'AFNetworking', '~> 3.0' # 图片缓存 po ...