博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3278——Catch That Cow(BFS,剪枝)
阅读量:2344 次
发布时间:2019-05-10

本文共 1753 字,大约阅读时间需要 5 分钟。

Description

Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

  • Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
  • Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

Input

Line 1: Two space-separated integers: N and K

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample Input

5 17

Sample Output

4

n只有三种变换情况,+1,-1,x2,求n最少能经过多少步成为k。

乍看很简单,对三种情况BFS就行了,但这个数据很大,容易TLE或者RE。
我第一次TLE,之后就设置了一个观察数组,如果某次BFS时又碰到了这个数,这时的次数肯定不是最小的。
第二次RE,又考虑了n大于k的情况,这时候肯定只能一直-1,所以特判。又x2的操作容易超数组,所以如果某次x2超过了目标的两倍,那肯定是没用的,剪掉。到达负数也不行,剪掉。最后就过了

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXN 100010#define mod 100010#define INF 0x3f3f3f3fusing namespace std;int n,k,ans;int vis[MAXN*10];struct Node{ int num; int step;};void bfs(int n){ queue
q; Node start,tmp1,tmp2; start.num=n; start.step=0; q.push(start); while(!q.empty()) { tmp1=q.front(); q.pop(); if(tmp1.num==k) { ans=min(ans,tmp1.step); return; } if(tmp1.num-1>=0) { tmp2.num=tmp1.num-1; tmp2.step=tmp1.step+1; if(!vis[tmp2.num]) { vis[tmp2.num]=1; q.push(tmp2); } } tmp2.num=tmp1.num+1; tmp2.step=tmp1.step+1; if(!vis[tmp2.num]) { vis[tmp2.num]=1; q.push(tmp2); } if(tmp1.num*2
>n>>k) { ans=INF; if(n>=k) { cout<
<

转载地址:http://yicvb.baihongyu.com/

你可能感兴趣的文章
2016年总结-Java程序员
查看>>
十万行代码的意义
查看>>
中国合伙人正能量语句
查看>>
正确做事与做正确的事
查看>>
校招上机题(收集)
查看>>
大量数据如何排序
查看>>
org.mybatis.spring.MyBatisSystemException(参数找不到问题)
查看>>
JQuery+JQuery ui实现的弹出窗口
查看>>
jQuery怎么获取<c:forEach>标签的值
查看>>
程序员应该知道的福利
查看>>
Java日期时间处理
查看>>
包装类
查看>>
Object/System/RunTime类
查看>>
字符串类/正则表达式
查看>>
看完不敢熬夜了
查看>>
Java异常处理
查看>>
JQueryUI实现对话框
查看>>
Java流(Stream)/文件(File)/IO
查看>>
文件处理(压缩与解压)
查看>>
Java中的目录
查看>>