【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 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...
随机推荐
- android中的4种点击事件
四种点击事件 (1)采用内部类的方式去实现OnClickListener (2)匿名内部类 (3)当前类imp OnClickListener (4)onclick ...
- ZOJ 1122 Clock(模拟)
Clock Time Limit: 2 Seconds Memory Limit: 65536 KB You are given a standard 12-hour clock with ...
- WPF设置窗口模式(Windowstyle=“None”)
当WindowStyle="None"时,设置AllowsTransparency="True",则不会出现黑色Border,然后可以另外设置外边的Border ...
- PHOTOSHOP 半透明方格
1.新建60*60的透明文档,在左方和上方用直线工具画白边,存储为图案(编辑/定义图案) 2.新建图层,用油漆桶填充图案 3. 选择若干小方格,填充白色后设置不透明度50%
- C#序列化/反序列化
序列化:将实体类以二进制或者XML的形式保存到磁盘或者内存中. 反序列化:将序列化的二进制文件和XML文件解析成实体类. 例如下面的二进制序列化与反系列化: using System; using S ...
- json,serialze之格式
<?php echo 'array-json:' . "\n"; $arr = array('key1'=>'value1', 'key2' => 'value2 ...
- jQuery.ajax()的一些例子
例子: Example: 保存数据到服务器,成功时显示信息. 1 2 3 4 5 6 7 $.ajax({ method: "POST", url: "some.php& ...
- fsockopen
fsockopen — 打开一个网络连接或者一个Unix套接字连接 说明 resource fsockopen ( string $hostname [, int $port = -1 [, int ...
- platform平台设备驱动简化示例代码
driver.c: #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h& ...
- 支持阻塞操作和轮询操作的globalfifo设备驱动代码分析以及测试代码
#include <linux/module.h> #include <linux/types.h> #include <linux/fs.h> #include ...