Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1193

Solution:

能立刻看出贪心算法,但发现在小数据时明显不适用

于是我们采取大数据时贪心,到一定范围时爆搜的算法

(似乎有点像AlphaGo的策略?)

在数据大于10时,我们每次将长边-2,短边-1,如有小于0的情况取绝对值即可(相当于选用对称方案)

用BFS预处理出数据<=10时的情况即可

Code:

#include <bits/stdc++.h>using namespace std;
typedef pair<int,int> P;int X1,Y1,X2,Y2,dist[105][105];
int dx[]={-2,-2,-1,-1,1,1,2,2},dy[]={1,-1,2,-2,2,-2,1,-1};
queue<P> que;void init()
{memset(dist,0x3f,sizeof(dist));dist[1][1]=0;que.push(P(1,1));while(!que.empty()){P t=que.front();que.pop();for(int i=0;i<8;i++){int fx=t.first+dx[i],fy=t.second+dy[i];if(fx<0 || fx>12 || fy<0 || fy>12) continue;if(dist[fx][fy]>dist[t.first][t.second]+1)dist[fx][fy]=dist[t.first][t.second]+1,que.push(P(fx,fy));}}
}int main()
{init();scanf("%d%d%d%d",&X1,&Y1,&X2,&Y2);int a=abs(X1-X2),b=abs(Y1-Y2),res=0;while((a>=10) || (b>=10)){if(a>b) swap(a,b);a-=1;b-=2;res++;a=abs(a);b=abs(b);}a++;b++;printf("%d",res+dist[a][b]);return 0;
}

Review:

1、如仅有适用于大数据时的贪心算法时,

考虑大数据时贪心,到满足时间复杂度时开始爆搜(很不错的思想)

2、能向各个方向移动的问题

如将数组左上角作为起点,一定要将边界空间留出(有时最优解需要往回走)

ex:此处第0行/列都是合法的,而-1行则可由第3行代替,便可不必考虑

更稳妥的方式是将起点设在中间,如(50,50)

转载于:https://www.cnblogs.com/newera/p/9094650.html

[BZOJ 1193] 马步距离相关推荐

  1. BZOJ 1193: [HNOI2006]马步距离【贪心+搜索】

    1193: [HNOI2006]马步距离 [题目描述] 传送门 [题解] 大范围贪心,然后小范围BFS,为了答案准确,尽量使这个小范围大,这题100就可以了. 代码如下 #include<que ...

  2. bzoj 1193: [HNOI2006]马步距离(贪心+BFS)

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2117  Solved: 953 [Submit][Sta ...

  3. 【BZOJ 1193】 [HNOI2006]马步距离

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 919   Solved: 419 [ Submit][ ...

  4. [Hnoi2006]马步距离

    1285: [Hnoi2006]马步距离 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 36  Solved: 16 [Submit][Status] ...

  5. P2060 [HNOI2006]马步距离

    P2060 [HNOI2006]马步距离 数据到百万级别,明显爆搜不行,剪枝也没法剪.先打表.发现小数据内步数比较受位置关系影响,但数据一大就不影响了.大概搜了一个20*20的表把赋值语句打出来.判断 ...

  6. 1193: [HNOI2006]马步距离

    题目链接 题目大意:求出从点 p 到点 s 至少需要经过多少次马步移动 题解:直接搜会T,贪心会WA--正解是大范围贪心,小范围暴力--有种取长补短的感觉--Orz 我的收获:乱搞出奇迹-- #inc ...

  7. bzoj1193:马步距离

    题目描述 在国际象棋和中国象棋中,马的移动规则相同,都是走"日"字,我们将这种移动方式称为马步移动.如图所示, 从标号为 0 的点出发,可以经过一步马步移动达到标号为 1 的点,经 ...

  8. 【ACWing】2135. 马步距离(配数学证明)

    题目地址: https://www.acwing.com/problem/content/description/2137/ 在国际象棋和中国象棋中,马的移动规则相同,都是走"日" ...

  9. BZOJ1193: [HNOI2006]马步距离

    易水人去,明月如霜. Description 在国际象棋和中国象棋中,马的移动规则相同,都是走"日"字,我们将这种移动方式称为马步移动.如图所示, 从标号为 0 的点出发,可以经过 ...

最新文章

  1. 重磅MIT开源人工智能算法评估和理解对抗Logit配对的稳健性
  2. 【Collection、泛型】
  3. 如何创建依赖于某时间段的ABAP视图
  4. Fiori Elements里的Reference Facet
  5. js文件中调用另一个js文件:
  6. Java编程的逻辑 (56) - 文件概述
  7. t–sql pl–sql_SQL Server性能疑难解答的DBA指南–第2部分–监视实用程序
  8. 跳转系统设置相关界面的方法
  9. Struts2入门这一篇就够了 1
  10. 小博老师精选Java十大CMS ——建站神器
  11. mysql-5.7.19-winx64_mysql5.7.19 winx64安装配置方法图文教程(win10)
  12. 中国互联网关于阿里未来预测:这盘大期如何走
  13. KnockoutJS 实例
  14. 三菱PLC功能指令详解
  15. 2022 WTM 女性开发者大会邀你开启心旅程
  16. 就Linux的一些操作,王里面导入jdk,mysql,tomcat三个包,实现项目在虚拟机上面运行
  17. 官方固件库V1.4版本介绍
  18. ps抠图技巧之图层样式
  19. springmvc接收请求参数(springmvc教程二)
  20. vue项目中使用地址选择插件v-distpicker,省市区三级联动选择

热门文章

  1. 小球碰壁反弹加分_js中小球碰壁反弹
  2. 我们的天空 - BEYOND
  3. 38211协议学习笔记(2)-帧结构和物理资源
  4. 58——FFA-Net: Feature Fusion Attention Network for Single Image Dehazing
  5. hdu 2160 母猪的故事
  6. python 日期大小比较
  7. 【python爬虫】js逆向:空气质量在线平台,解决反调试,加密
  8. 提供凭证不足 无法访问这台计算机,xp系统纯净版连接win7打印机显示“提供的凭证不足”怎么办...
  9. 嵌入式Linux下LCD应用编程: 调用giflib库解码显示GIF动态图
  10. 永大电梯服务器显示连接断开,提供上海永大电梯服务器