【题意】

  有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. Java——String.split()函数

    在java doc里有 String[] java.lang.String.split(String regex) Splits this string around matches of the g ...

  2. ###《Effective STL》--Chapter3

    点击查看Evernote原文. #@author: gr #@date: 2014-09-13 #@email: forgerui@gmail.com Chapter3 关联容器 Topic 22: ...

  3. iOS 返回到指定的ViewController

    for (UIViewController *vc in self.navigationController.viewControllers) { if ([vc isKindOfClass:[MyV ...

  4. iOS -数据持久化之CoreData

    Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...

  5. Java多线程同步代码块

    /*多线程的安全问题1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候, ...

  6. centos 6.4 安装php-fpm 及常用扩展,(转)

    今天又装了一次开发环境,以前忘记记录了 这次记录一下 ---------------------------------------- centos6 yum安装nginx.php-fpm 时间201 ...

  7. 啊哈!算法:解密QQ号

    书中给出的算法有点浪费空间,可以使用循环队列进行改进,这样就不需要使用额外的空间,在原数组的基础上就可以完成解密,代码如下: #include <stdio.h> void decode( ...

  8. Qwt的编译与配置

    QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图.它为具有技术专业背景的程序提供GUI组件和一组实用类 ...

  9. thinkphp验证码的实现

    两种验证码验证实现,一种直接在form表单提交按钮实现验证,一种使用ajax传递参数实现验证: 1.直接在form表单提交按钮实现验证,在控制器VerifyController.class.php中写 ...

  10. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...