[2017纪中11-1]序列 搜索+IDA*
来源:互联网 发布:数据脱敏方式 编辑:程序博客网 时间:2024/06/05 18:13
题面
每次将 n 翻转到 x1 再翻转到 xn,可以得到一个不超过2n-2 步的做法。由于步数不多,我们可以使用迭代加深搜索。
我们发现每次翻转只会改变一对相邻数对,因此对于一个状态求出相差>1 的相邻数对的数量,剩余步数一定大于这个值。加上这个剪枝就能通过本题。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;int n,m,a[30];bool pd;inline void reverse(int k){ for(int i=1;i<=(k>>1);i++) swap(a[i],a[k-i+1]);}inline bool check(){ for(int i=1;i<=n;i++) if(a[i]!=i) return 0; return 1; }inline void dfs(int d){ int k=0; for(int i=1;i<n;i++) k+=(abs(a[i]-a[i+1])>1); if(d+k>m) return; if(check()){pd=1;return;} for(int i=2;i<=n;i++) { reverse(i); dfs(d+1); reverse(i); if(pd) return ; }}int main(){ int ca; scanf("%d",&ca); while(ca--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(m=0;;m++) { pd=0; dfs(0); if(pd) break; } printf("%d\n",m); } return 0;}
阅读全文
0 0
- [2017纪中11-1]序列 搜索+IDA*
- 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
- 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
- 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
- 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
- 搜索算法:IDA*算法
- 搜索算法:IDA*算法
- 搜索,A* IDA*
- HDU 1560 IDA*搜索
- HDU1685Booksort(IDA* 搜索)
- HDU 4127 Flood-it!(11年福州 IDA*搜索)
- HDU 3220 IDA*搜索 || BFS
- 【IDA*搜索】uva11212Editing a Book
- POJ 2286 搜索 (IDA*)
- POJ 1084 搜索(IDA*)
- 八数码的A*与IDA*算法-搜索进阶练习1
- HDU 1667 The Rotation Game IDA*搜索
- HDU 1560 DNA sequence IDA*搜索
- Bugly热更新集成,以及遇到的问题
- 关于FireFox扩展插件的示例演示
- Linux Swap交换分区设置
- Android Activity被回收后的处理
- DNP3.0快速入门
- [2017纪中11-1]序列 搜索+IDA*
- spi协议
- ffmpeg: 合并/合并多个mp4视频不工作
- opencv安装问题`ippicv_linux_20140513.tgz...`
- FreeType 2.8字体引擎 + MFC实现
- 使用ifstream和getline读取文件内容 c++
- log4j.properties配置详解与实例
- Max number of threads (maxWaitQueueSize) of 500 has been exceeded
- Uncaught TypeError: jQuery.handleError is not a function