BZOJ2824 AHOI2012 铁盘整理


Description

在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不利于循序渐进的锻炼。他打算利用一个非常省力气的办法来整理这些铁盘,即每次都拿起最上面的若干个圆盘并利用器械的力量上下翻转,这样翻转若干次以后,铁盘将会按照从小到大的顺序排列好。那么你能不能帮小龙确定,最少翻转几次就可以使铁盘按从小到大排序呢?

例如:下面的铁盘经过如图2.1所示的以下几个步骤的翻转后变为从小到大排列。

Input

共两行,第一行为铁盘个数N(1≤N≤50)。

第二行为N个不同的正整数(中间用空格分开),分别为从上到下的铁盘的半径 R(1≤R≤100)

Output

一个正整数,表示使铁盘按从小到大有序需要的最少翻转次数。

Sample Input

5

2 4 3 5 1

Sample Output

5


IDA*,注意一下估价函数,在这里我们翻转一次只会改变两端的相邻的铁盘的大小关系,所以我们只用计算不可以放在一起的铁盘个数就好了


#include<bits/stdc++.h>
using namespace std;
#define N 60
struct Node{int val,id;}pre[N];
bool cmp(Node a,Node b){return a.val<b.val;}
int n,ans=1000,a[N];
int check(){
int res=0;
for(int i=2;i<=n;i++)
if(abs(a[i]-a[i-1])!=1)res++;
return res+(a[n]!=n);//********
}
bool judge(){
for(int i=1;i<=n;i++)
if(a[i]!=i)return 0;
return 1;
}
bool dfs(int tmp,int up){
if(tmp==up)return judge();
if(check()+tmp>up)return 0;
for(int i=2;i<=n;i++)if(a[i+1]-a[i]!=1){
for(int j=1;j<=i/2;j++)swap(a[j],a[i-j+1]);
if(dfs(tmp+1,up))return 1;
for(int j=1;j<=i/2;j++)swap(a[j],a[i-j+1]);
}
return 0;
}
int main(){
// freopen("2824.in","r",stdin);
// freopen("2824.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&pre[i].val),pre[i].id=i;
sort(pre+1,pre+n+1,cmp);
for(int i=1;i<=n;i++)pre[pre[i].id].val=i;
for(int i=1;i<=n*2;i++){
for(int j=1;j<=n;j++)a[j]=pre[j].val;
if(dfs(0,i)){
cout<<i;
return 0;
}
}
return 0;
}

BZOJ2824 AHOI2012 铁盘整理 【IDA*】的更多相关文章

  1. 洛谷 P2534 [AHOI2012]铁盘整理

    P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...

  2. BZOJ 2824: [AHOI2012]铁盘整理

    BZOJ 2824: [AHOI2012]铁盘整理 标签(空格分隔): OI-BZOJ OI-搜索 Time Limit: 10 Sec Memory Limit: 128 MB Descriptio ...

  3. 洛谷P2534 [AHOI2012]铁盘整理

    P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...

  4. [AHOI2012]铁盘整理

    题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1<=R<=100) 输出格式: ...

  5. window 7 C盘整理

    发现两篇不错的文章可以参考一下: http://blog.renren.com/blog/200083873/467545630 http://www.uedbox.com/win7-c-disk-s ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. 博客索引and题目列表

    目录 笔记整理 计划 要学的东西 缺省源 要做的题 搜索 高斯消元 矩阵 排列组合 2019.7.9 2019.7.10 kmp ac自动机 2019.7.11 2019.7.15 笔记整理 1.同余 ...

  8. SSH项目需要的所有架包

    原地址:https://blog.csdn.net/qq_35816104/article/details/54346182   SSH框架:struts2 hibernate spring 该三大框 ...

  9. 东站七雄保C位!论三线楼市网红板块的自我修养

    不对!东站板块才是伍家岗的C位.这里有东站七雄! 前些天发了一篇城东C位之路的文章,居然引发了诸葛说房聊天群内大佬的激烈纷争.公说公有理婆说婆有理,一时争的是不可开交,大有约架之势.所以我决定提前写& ...

随机推荐

  1. ABP 源码分析汇总之 IOC

    IOC的优点: 1. 依赖接口,而非实现,如下代码, 这样的好处就是,客户端根本不知道PersonService的存在,如果我们换一下IPersonService的实现,客户端不用任何修改, 说的简单 ...

  2. 数据库的ACID特性详解

    ACID是指在 数据库管理系统(DBMS)中事物所具有的四个特性:原子性.一致性.隔离性.持久性 事物:在数据库系统中,一个事务是指由一系列连续的数据库操作组成的一个完整的逻辑过程.这组操作执行前后, ...

  3. .net的根目录区别

    很久没搞.net了,时间一场,全忘记了,倒,,, “~/” 是应用程序根目录“/”  也是表示根目录 “./” 是当前目录“../”表示当前目录的上一级目录

  4. max_spare_servers到底是个什么意思?

    pm.max_children=500pm.start_servers=280pm.min_spare_servers=50pm.max_spare_servers=500 把max_spare_se ...

  5. js数组与字符串的相互转换

    一.数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a, b,c; a = new Array(a,b,c,d,e); b = a.join('-'); //a-b-c-d ...

  6. centos 6 安装python2.7和pip

    由于scrapy1.0的发布,想在Linux上测试,所以安装了centos6.6:但是它的python版本为2.6,很多东西都不支持,所以需要升级为2.7: 首先是在window7上安装虚拟机,然后安 ...

  7. spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClassNameHandlerMapping

    spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClas ...

  8. C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 05)

    ----------------------------------------- error 使用 (异常处理) // 语法 (普通错误) import "errors" fun ...

  9. day31 堡垒机尾声 + Python与金融量化分析(一)

    堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...

  10. tkinter模块常用参数

    tkinter模块常用参数   1.使用tkinter.Tk() 生成主窗口(root=tkinter.Tk()):root.title('标题名')    修改框体的名字,也可在创建时使用class ...