https://www.lydsy.com/JudgeOnline/problem.php?id=5449

话说很早以前做过。。算是IDA*的板子吧,一个简单的估价函数就可以过去了

 %:pragma GCC optimize()
#include<cstdio>
#include<algorithm>
using namespace std;
int a[],n,maxd,T;
bool fl;
inline bool check()
{
for(int i=;i<n;++i)
if(a[i]>a[i+])
return ;
return ;
}
//reverse一次,相邻两数绝对值之差大于1的最多减少1个,
//因此相邻两数绝对值之差大于1的个数一定小于等于所需reverse次数
inline int hh()
{
int cnt=;
for(int i=;i<n;++i)
if(abs(a[i+]-a[i])>)
cnt++;
return cnt;
}
inline void reverse1(const int& r)
{
int i,t;
for(i=;i<=r/;++i)
{
t=a[i];a[i]=a[r-i+];a[r-i+]=t;
}
}
void dfs(int x,int last)
{
if(fl) return;
if(x==maxd)
{
if(check()) fl=;
return;
}
if(x+hh()>maxd) return;
for(int i=;i<=n;++i)
if(i!=last)
{
reverse(a+,a+i+);
dfs(x+,i);
reverse(a+,a+i+);
}
}
int main()
{
int i;
scanf("%d",&T);
while(T--)
{
fl=;
scanf("%d",&n);
for(i=;i<=n;++i)
scanf("%d",&a[i]);
for(maxd=;maxd<=;++maxd)
{
dfs(,);
if(fl) break;
}
printf("%d\n",maxd);
}
return ;
}

此题http://210.33.19.103/contest/823/problem/2(序列)同以上题


upd20190222:

根据网上一些高分程序优化了一下估价函数和代码...

 %:pragma GCC optimize()
#include<cstdio>
#include<algorithm>
using namespace std;
int a[],n,maxd,T;
bool fl;
inline int abs1(int x){return x>?x:-x;}
inline int hh()
{
int cnt=(a[n]!=n);
for(int i=;i<n;++i)
if(abs1(a[i+]-a[i])>)
++cnt;
return cnt;
}
void dfs(int x,int last)
{
int h=hh();
if(!h) {fl=;return;}
if(x+h>maxd) return;
for(int i=;i<=n;++i)
if(i!=last)
{
reverse(a+,a+i+);
dfs(x+,i);
if(fl) return;
reverse(a+,a+i+);
}
}
int main()
{
int i;
scanf("%d",&T);
while(T--)
{
fl=;
scanf("%d",&n);
for(i=;i<=n;++i)
scanf("%d",&a[i]);
for(maxd=;maxd<=;++maxd)
{
dfs(,);
if(fl) break;
}
printf("%d\n",maxd);
}
return ;
}

bzoj 5449 序列的更多相关文章

  1. BZOJ 1251 序列终结者(Splay)

    题目大意 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...

  2. [bzoj]2962序列操作

    [bzoj]2962序列操作 标签: 线段树 题目链接 题意 给你一串序列,要你维护三个操作: 1.区间加法 2.区间取相反数 3.区间内任意选k个数相乘的积 题解 第三个操作看起来一脸懵逼啊. 其实 ...

  3. bzoj 1858 序列操作

    bzoj 1858 序列操作 带有随机多个区间单值覆盖的区间操作题,可考虑用珂朵莉树解决. #include<bits/stdc++.h> using namespace std; #de ...

  4. bzoj 1283 序列 - 费用流

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求选出一些数使得原序列中每$m$个连续的数中不超过$K$个被选走.问最大的可能的和. 感觉建图好妙啊.. 考虑把问题转化成选$m$次数,每次 ...

  5. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  6. BZOJ 1251: 序列终结者

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 3773  Solved: 1579 [Submit][Status][Dis ...

  7. Bzoj 4403: 序列统计 Lucas定理,组合数学,数论

    4403: 序列统计 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 328  Solved: 162[Submit][Status][Discuss] ...

  8. bzoj 维护序列seq(双标记线段树)

    Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 4184  Solved: 1518[Submit][Status][Discus ...

  9. bzoj 2962 序列操作

    2962: 序列操作 Time Limit: 50 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为n的序列, ...

随机推荐

  1. codeforces776D

    传送门 这题的意思就是原本有一个长度为n的01串,再给出m的长度为n的01串,要求你判定是否可以通过原串与m个串中的某些串xor使得原串到达一个状态.n,m小于1e5. 这题最初我发现不可做,因为这貌 ...

  2. Codeforces Round #363 (Div. 2) D. Fix a Tree —— 并查集

    题目链接:http://codeforces.com/contest/699/problem/D D. Fix a Tree time limit per test 2 seconds memory ...

  3. Java深度理解——Java字节代码的操纵

    导读:Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展.但是对于 Java语言的深度理解和运用,毕竟是很少会有人涉及的话 ...

  4. scanf()函数

    Scanf函数攻略: (A)                格式化说明符 格式字符           说明 %d                 读入十进制整数 %u                 ...

  5. Kvm学习文档记录

    一.实验环境: 在vmware上打开vt支持选项: 操作系统信息: [root@node2 ~]# cat /etc/issue CentOS release 6.6 (Final) Kernel \ ...

  6. 出现”/var/lib/mysql/mysql.sock“不存在的解决方法

    这种情况大多数是因为你的mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,通过unix socket登录mysql.常见解决办法如下:1.创 ...

  7. TX1 ssh配置

    执行: sudo apt-get install openssh-server 验证: sudo ps -e |grep ssh 回车-->有sshd,说明ssh服务已经启,如果没有则输入命令s ...

  8. HDU1711(KMP入门题)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. jquery data 选择器 表格序列化serialize()

    data()在元素上存放或者读取数据,返回jquery对象. demo: <div data-obj="{'name':'zhangsan','age':20}">&l ...

  10. Ubuntu12.04下安装、使用、卸载MySQL

    转自:http://blog.csdn.net/yimi0903/article/details/11800713 一.安装 Step1:安装MySQL-server,mysql-client 执行以 ...