【题意】

  有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*)的更多相关文章

  1. 【UVa】1374 Power Calculus(IDA*)

    题目 题目     分析 IDA*大法好,抄了lrj代码.     代码 #include <cstdio> #include <cstring> #include <a ...

  2. 【Luogu】P2324骑士精神(IDA*)

    题目链接 当guess>limit-deep的时候return就好了. guess是估价函数,值为不在自己地盘上的骑士个数.limit是本次迭代阈值.deep是已经走了多少步. 这个优化是显然的 ...

  3. 【Swift】iOS开发历险记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  4. 洛谷P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...

  5. 【函数】Oracle函数系列(2)--数学函数及日期函数

    [函数]Oracle函数系列(2)--数学函数及日期函数 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  6. 【原创】OllyDBG 入门系列(一)-认识OllyDBG

     ****** http://blog.fishc.com/645.html   标 题: [原创]OllyDBG 入门系列(一)-认识OllyDBG作 者: CCDebuger时 间: 2006-0 ...

  7. CJOJ 2022 【一本通】简单的背包问题(搜索)

    CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...

  8. 【BZOJ3680】吊打XXX(模拟退火)

    [BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...

  9. 【BZOJ3671】【NOI2014】随机数据生成器(贪心)

    [BZOJ3671][NOI2014]随机数据生成器(贪心) 题面 BZOJ 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...

随机推荐

  1. 关于apple watch(苹果表)

      如何升级呢? 对于Apple Watch用户来说,只要打开Apple Watch的iPhone应用,打开主菜单然 后选择软件升级,就能下载升级文件.新版本可以无线安装.需要注意的是,在升级 wat ...

  2. Microsoft Word 的键盘快捷方式

    Microsoft Word 的键盘快捷方式 全部显示 全部隐藏 本帮助文章中描述的键盘快捷方式适用于美式键盘布局.其他键盘布局的键可能与美式键盘上的键 不完全对应. 注释   本文不介绍如何为宏或自 ...

  3. vim自动补全:go

    1 环境配置 export GOPATH=/home/go 2 在新建GOPATH下新建三个目录 mkdir src pkg bin src 存放源码pkg 存放编译生成的文件bin 存放生成的可执行 ...

  4. extjs类的生命周期

    只要extjs对应的类文件加载了,那么该类就可以构造对象或者用来继承了.

  5. union 和 union all 的区别

    Union因为要进行重复值扫描,所以效率低.如果合并没有刻意要删除重复行,那么就使用Union All  两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致): 如果我们需要将两个 ...

  6. 第三篇、C_双向链表(循环链表)

    简介: 在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高.因此常常需要考虑系统的实用性,常常采用双向链表来开发. 示例: 1.数据 typedef ...

  7. Core Animation之CABasicAnimation

    在iOS中,图形可分为以下几个层次: 越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低:反之亦然.本文着重介绍Core Animation层的基本动画实现方案. 在iOS中,展示动画可以类比 ...

  8. Codevs 1173 最优贸易 2009年NOIP全国联赛提高组

    1173 最优贸易 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description [问题描述] C 国有n ...

  9. 简单模拟struts2核心控制器利用反射原理实现参数传递和物理视图跳转

    在能够运用struts2框架进行简单网站开发后,对struts2的一些较原框架强大的功能希望有更深刻的理解,于是尝试从底层开始摸索,本文就在重新学习struts2后,利用简单代码对核心控制器的主要功能 ...

  10. MySQL基础学习之视图

    创建新的视图 CREATE VIEW 视图名  AS SELECT  属性,属性1,属性2  FROM 表名 创建新的视图并指定数据名 CREATE VIEW 视图名(新属性,新属性1,新属性2)   ...