【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 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...
随机推荐
- JDBC与ODBC的区别与应用
jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...
- Java接口的表现形式
一.概念理解 Java接口是一些方法特征的集合,并没有方法的具体实现,类似于电源插座,可以充不同类型的电器,但是必须适配特定的接口规范.接口是抽象化的,所以其不能被实例化的(不能有构造函数,创建对象) ...
- C#JSON格式数据的转换
json格式字符串转化为json对象:JObject calculate = (JObject)JsonConvert.DeserializeObject(Rep.Request["data ...
- Delphi推出Delphi XE4支持IOS开发
Delphi 新推出 Delphi XE4 ,这是一个支持 iOS 应用开发的新版本.Delphi XE4 带来 Embarcadero 全新的 ARM 编译器 下载地址
- poj2594 (最小路径覆盖 + floyd)
题目链接 http://poj.org/problem?id=2594) 题目大意: 一个有向图中, 有若干条连接的路线, 问最少放多少个机器人,可以将整个图上的点都走过. 最小路径覆盖问题. 分析 ...
- 01顺序栈_Stack---(栈与队列)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- Java多线程练习:ticket卖票程序
/*需求:简单的卖票程序多个窗口买票 */ class Ticket extends Thread{ private static int tick=100; public void ru ...
- Java 7 新的 try-with-resources 语句,自动资源释放
Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理. 新的语句支持包括 ...
- 计算 unique word numbers
计算不重复单词的个数 参考: 1.Unique words count
- web api写api接口时返回
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...