移动一块连续的区间使得数列递增。问最少次数。

直接IDA*暴搜,只是我没有想到A*函数,所以就随手写了个连续递增块数作为估价函数,WA了,然后除以2,还是WA,除以3,WA,除以4.。。过了= =

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<list>
#include<algorithm>
using namespace std;
#define stop system("pause")
int n,a[20],lim;
void print(int *a){for(int i=1;i<=n;i++) printf("%d ",a[i]);puts("");}
int h(int *s)
{
int cnt=0;
for(int i=1;i<n;i++)
if(s[i]+1!=s[i+1])
cnt++;
if(s[n]!=n) cnt++;
return cnt/4;
}
bool change(int from,int ed,int to,int *s)
{
if(to>=from-1&&to<=ed) return false;
int next[20],tmp[20];
for(int i=0;i<=n;i++) tmp[i]=s[i],next[i]=i+1;
next[from-1]=ed+1;
next[to]=from;
next[ed]=to+1;
for(int i=next[0],cnt=1;cnt<=n;i=next[i],cnt++)
{
s[cnt]=tmp[i];
}
return true;
}
bool over(int *a)
{
for(int i=1;i<=n;i++) if(a[i]!=i) return false;
return true;
}
bool dfs(int dep,int *s)
{
if(over(s)) return true;
if(dep>=lim) return false;
if(dep+h(s)>=lim) return false;
for(int from=1;from<=n;from++)
{
for(int ed=from;ed<=n;ed++)
{
for(int to=0;to<=n;to++)
{
int tmp[15];
memcpy(tmp,s,sizeof(int)*(n+1));
if(change(from,ed,to,tmp)==0) continue;
if(dfs(dep+1,tmp)) return true;
}
}
}
return false;
}
int main()
{
int ca=1;
while(~scanf("%d",&n))
{
if(n==0) break;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(lim=h(a);!dfs(0,a);lim++) ;
printf("Case %d: %d\n",ca++,lim);
}
return 0;
}
/*
9
9 8 7 6 5 4 3 2 1
*/

貌似正解应该是 dep*3+h()>lim*3

UVA 11212 IDA*的更多相关文章

  1. Editing a Book UVA - 11212 IDA*

    You have n equal-length paragraphs numbered 1 to n . Now you want to arrange them in the order of 1 ...

  2. UVA 11212 Editing a Book [迭代加深搜索IDA*]

    11212 Editing a Book You have n equal-length paragraphs numbered 1 to n. Now you want to arrange the ...

  3. UVa 11212 编辑书稿(dfs+IDA*)

    https://vjudge.net/problem/UVA-11212 题意:给出n个自然段组成的文章,将他们排列成1,2...,n.每次只能剪切一段连续的自然段,粘贴时按照顺序粘贴. 思路:状态空 ...

  4. UVA - 11212 Editing a Book (IDA*)

    给你一个长度为n(n<=9)的序列,每次可以将一段连续的子序列剪切到其他地方,问最少多少次操作能将序列变成升序. 本题最大的坑点在于让人很容易想到许多感觉挺正确但实际却不正确的策略来避开一些看似 ...

  5. UVA - 11212 Editing a Book (IDA*搜索)

    题目: 给出n(1<n<10)个数字组成的序列,每次操作可以选取一段连续的区间将这个区间之中的数字放到其他任意位置.问最少经过多少次操作可将序列变为1,2,3……n. 思路: 利用IDA* ...

  6. UVa 11212 Editing a Book (IDA* && 状态空间搜索)

    题意:你有一篇n(2≤n≤9)个自然段组成的文章,希望将它们排列成1,2,…,n.可以用Ctrl+X(剪切)和Ctrl+V(粘贴)快捷键来完成任务.每次可以剪切一段连续的自然段,粘贴时按照顺序粘贴.注 ...

  7. UVA - 11212 Editing a Book(IDA*算法+状态空间搜索)

    题意:通过剪切粘贴操作,将n个自然段组成的文章,排列成1,2,……,n.剪贴板只有一个,问需要完成多少次剪切粘贴操作可以使文章自然段有序排列. 分析: 1.IDA*搜索:maxn是dfs的层数上限,若 ...

  8. uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索

    迭代加深搜索 自己看的时候第一遍更本就看不懂..是非常水,但智商捉急也是没有办法的事情. 好在有几个同学已经是做过了这道题而且对迭代加深搜索的思路有了一定的了解,所以在某些不理解的地方询问了一下他们的 ...

  9. UVA 11212 Editing a Book

    题意: 有一篇由n个自然段组成的文章.希望将他们排成递增序列.只能剪贴和粘贴交替进行,剪贴时可以剪贴一段连续的自然段. 分析: 用IDA*算法求解.当3*d+h>maxd时剪枝. 代码: #in ...

随机推荐

  1. SGU 178.Chain

    Solution: 一开始做的时候,以为可以将一条长度为n的链分成和n为的任意长度的3部分.结果第二组就Wa了 后来参考了题解,发现是将长度为n的链分成长度为1,x,n-1-x的三条链.再看看题目,不 ...

  2. js中立即执行

    ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到 ...

  3. URPF 简单流程

    主要功能是防止基于源地址欺骗的网络攻击. 路由器接口一旦使能URPF功能,当该接口收到数据报文时,首先会对数据报文的源地址进行合法性检查,对于源地址合法性检查通过的报文,才会进一步查找去往目的地址的转 ...

  4. prototype/constructor/__proto__之constructor。

    1.constructor的字面意思就是构造.它是对象的一个属性,它对应的值是该对象的“构造者” //一.构造函数实例化的对象的constructor function Cmf(n,m){ this. ...

  5. TatukGIS - GisDefs - CheckDir 函数

    函数名称  CheckDir 所在单元  GisDefs 函数原型  function CheckDir(const _path: String): Boolean;   函数说明 如果 _path ...

  6. DataTable举例

    // clrTest1.cpp: 主项目文件. #include "stdafx.h" using namespace System; using namespace System ...

  7. UIDevice-b

    typedef NS_ENUM(NSInteger, UIDeviceOrientation) //设备方向 { UIDeviceOrientationUnknown, UIDeviceOrienta ...

  8. 转:PHP如何阻止用户上传成人照片或者裸照

    原文来自于:http://www.hackbase.com/tech/2014-10-12/69367.html 当前,网络淫秽色情信息屡禁不止.屡打不绝,严重危害未成年人身心健康,严重败坏社会风气, ...

  9. 【Linux】鸟哥的Linux私房菜基础学习篇整理(八)

    1. useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM]\   [-c 说明栏] [-d 主文件夹绝对路径] [-r] [-s shell] 用户账号名:新增用户 ...

  10. 【转】如何开发苹果iOS操作平台下的应用程序?

    原文网址:http://zhidao.baidu.com/link?url=vxRWjCchSstFmVKvxEqLqfqomu2h5kF-NLAIVEehQgN_FnYtEi4f5yPMS6ywbU ...