当前位置: 首页 > news >正文

POJ 3460 Booksort IDA*

此题是黑书上的例题,其中估价函数比较强大,看黑书看懂的。不过这里也挺繁杂的,不小心就出错,贡献了好几个wa。代码能力还是太弱

其中的注意点我都注释了,其他的就是套模板了。

#include<stdio.h> #include<string.h> #include<queue> #include<math.h> using namespace std; int n; int bound; int book[20]; bool ans; int Min(int a,int b){ return a>b?b:a; } int h(int * book){ int i; int sum=0; if(book[1]!=1) sum=1; for(i=1;i<n;i++) if(book[i]+1!=book[i+1]) sum++; return ceil((double)(sum)/3); //这里坑死我 } void change(int *book,int p,int q,int r){ int c[20],i,j; for(i=q+1;i<=r;i++) c[i]=book[i]; for(i=q,j=r;i>=p,j>=p+r-q;i--,j--) book[j]=book[i]; for(i=p,j=q+1;j<=r;i++,j++) //通过双下标形式不易出错 book[i]=c[j]; } int dfs(int dep,int *nu){ int i,j,k,p,next_bound; int tmp[20]; int hv=h(nu); if(hv+dep>bound) return hv+dep; if(hv==0){ ans=true; return dep; } int new_bound=1e7; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) for(k=i;k<j;k++){ for(p=1;p<=n;p++) tmp[p]= nu[p]; change(tmp,i,k,j); next_bound = dfs(dep+1,tmp); if(!ans) new_bound=Min(new_bound,next_bound); else return next_bound; } return new_bound; } void IDA_STAR(){ bound=h(book); while(bound<5 && !ans){ bound=dfs(0,book); } if(ans) printf("%d\n",bound); else printf("5 or more\n"); } int main(){ int i,j,T,t; scanf("%d",&T); for(t=1;t<=T;t++){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&book[i]); ans=false; IDA_STAR(); } }


相关文章:

  • SpringCloud系列八:自定义Ribbon配置
  • 结构之法算法之道blog最新博文集锦第6期CHM文件0积分下载
  • BZOJ4318: OSU!
  • MSBuild使用初步
  • python库--pandas--写入文本文件
  • WPF程序编译(从命令行到Visual Studio)
  • Hibernate学习(1)- 初识
  • C#下.NET配置文件使用(一)
  • JS运行机制(进程与线程的区分)
  • C#下.NET配置文件使用(二)
  • MAC为Apache2服务器配置多个虚拟主机
  • WPF下的布局(Layout、Panel)小记
  • let 与 const 的用法
  • 从CT技术想到的软件测试
  • Linux CentOS7 VMware 文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr...
  • 【Leetcode】101. 对称二叉树
  • ECMAScript入门(七)--Module语法
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux中的硬链接与软链接
  • mysql 数据库四种事务隔离级别
  • Vue UI框架库开发介绍
  • 关于Java中分层中遇到的一些问题
  • 关于使用markdown的方法(引自CSDN教程)
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)357
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 区块链共识机制优缺点对比都是什么
  • 应用生命周期终极 DevOps 工具包
  • #每日一题合集#牛客JZ23-JZ33
  • (3)nginx 配置(nginx.conf)
  • (9)目标检测_SSD的原理
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (算法)N皇后问题
  • (一)插入排序
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)关于pipe()的详细解析
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .form文件_SSM框架文件上传篇
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net FrameWork简介,数组,枚举
  • .NET Remoting学习笔记(三)信道
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [1159]adb判断手机屏幕状态并点亮屏幕