【Uva11212】 Editing a Book(IDA*)
【题意】
有n个数字的全排列,每次可以剪切一段粘贴到某个位置。问最后变成升序最少多少步。
如“{2,4,1,5,3,6}要2步
{3,4,5,1,2}只要一步
【分析】
迭代深搜真的AC了也觉得慌= =
【其实看到这题不应该想到宽搜么???
全排列只有9!=362880个
这题的IDA*的估价函数特别机智:
n<=9,最多2需要8步,深度上限为8。
考虑后继不正确的赎回自个数h,可以证明每次剪切时候h最多减少3,因此当3*d+h>3*maxd时可以剪枝。
【证明上面那个画一下就知道,一次复制粘贴只有3个东西的后继被影响。【机智ORZ ....
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #include<iostream>
- #include<algorithm>
- #include<queue>
- #include<cmath>
- using namespace std;
- #define Maxn 15
- int a[Maxn][Maxn],v[Maxn];
- int maxd,n;
- bool ok;
- bool ffind(int x,int h)
- {
- if(x==maxd)
- {
- if(h!=) return ;
- ok=;return ;
- }
- if(*x+h>*maxd) return ;
- for(int i=;i<=n;i++)
- for(int j=i;j<=n;j++)
- {
- for(int k=;k<i;k++)
- {
- for(int l=i;l<=j;l++) a[x+][k+l-i]=a[x][l];
- for(int l=k;l<i;l++) a[x+][l+j-i+]=a[x][l];
- for(int l=;l<k;l++) a[x+][l]=a[x][l];
- for(int l=j+;l<=n;l++) a[x+][l]=a[x][l];
- h=;
- for(int l=;l<n;l++) if(a[x+][l+]!=a[x+][l]+) h++;
- ffind(x+,h);
- if(ok==) return ;
- }
- for(int k=j+;k<=n;k++)
- {
- for(int l=i;l<=j;l++) a[x+][k+l-j]=a[x][l];
- for(int l=;l<i;l++) a[x+][l]=a[x][l];
- for(int l=j+;l<=k;l++) a[x+][l-j+i-]=a[x][l];
- for(int l=k+;l<=n;l++) a[x+][l]=a[x][l];
- h=;
- for(int l=;l<n;l++) if(a[x+][l+]!=a[x+][l]+) h++;
- ffind(x+,h);
- if(ok==) return ;
- }
- }
- return ;
- }
- int main()
- {
- int kase=;
- while()
- {
- ok=;
- scanf("%d",&n);
- if(n==) break;
- for(int i=;i<=n;i++) scanf("%d",&a[][i]);
- int h=;
- for(int i=;i<n;i++) if(a[][i+]!=a[][i]+) h++;
- printf("Case %d: ",++kase);
- for(maxd=;maxd<=n-;maxd++)
- {
- if(ffind(,h)) {printf("%d",maxd);break;}
- }
- printf("\n");
- }
- return ;
- }
2016-11-15 09:13:56
【Uva11212】 Editing a Book(IDA*)的更多相关文章
- 【UVa】1374 Power Calculus(IDA*)
题目 题目 分析 IDA*大法好,抄了lrj代码. 代码 #include <cstdio> #include <cstring> #include <a ...
- 【Luogu】P2324骑士精神(IDA*)
题目链接 当guess>limit-deep的时候return就好了. guess是估价函数,值为不在自己地盘上的骑士个数.limit是本次迭代阈值.deep是已经走了多少步. 这个优化是显然的 ...
- 【Swift】iOS开发历险记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 洛谷P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- 【原创】OllyDBG 入门系列(一)-认识OllyDBG
****** http://blog.fishc.com/645.html 标 题: [原创]OllyDBG 入门系列(一)-认识OllyDBG作 者: CCDebuger时 间: 2006-0 ...
- CJOJ 2022 【一本通】简单的背包问题(搜索)
CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 【BZOJ3671】【NOI2014】随机数据生成器(贪心)
[BZOJ3671][NOI2014]随机数据生成器(贪心) 题面 BZOJ 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...
随机推荐
- 也谈一下Activiti工作流节点的自由跳转
最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后加载 ...
- RabbitMQ 配置文件无法成功应用
本来想远程启用下Guest账户测试一下(学习),但配置文件修改后总是不成功(没有效果) 过程如下: 1:先找到配置文件地址 不错,很贴心还有说明,在登录账户的AppData下. 2:直接进入对应目录: ...
- mysql关键字讲解(join 、order by、group by、having、distinct)
1.join 1.1 OUTER JOIN:想要包含右侧表中的所有行,以及左侧表中有匹配记录的行. 1.11 Mysql中有左连接(left join): ...
- 第八篇、UITableView常用功能(左滑出现多个按钮,多选删除等)
1.左滑动出现多个按钮 /** * 只要实现了这个方法,左滑出现按钮的功能就有了 (一旦左滑出现了N个按钮,tableView就进入了编辑模式, tableView.editing = YES) */ ...
- Git和CocoaPods的简单使用
Git是一款免费.开源的分布式版本控制系统,还有一种SVN的开源的集中式版本控制系统.分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一 ...
- SpringInAction读书笔记--第4章面向切面
1.什么是面向切面编程 在软件开发中,散布于应用中多处的功能被称为横切关注点,这些横切关注点从概念上是与应用的业务逻辑相分离的,但往往分直接嵌入到应用的业务逻辑之中,把这些横切关注点与业务逻辑相分离正 ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
- 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit ...
- windows10和ubuntu16.04双系统下时间不对的问题
最近装了windows10和ubuntu16.04双系统,仍然出现了喜闻乐见的老问题,装完后,在windows下时区不对,之前的老办法是: sudo gedit /etc/default/rcS ut ...
- redis 入门笔记(一)
redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的web应用程序的完美解决方案 三个主要特点: 1,Redis数据库完全在内存中,使用磁盘仅用于持久性 ...