bzoj 5449 序列
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 序列的更多相关文章
- BZOJ 1251 序列终结者(Splay)
题目大意 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...
- [bzoj]2962序列操作
[bzoj]2962序列操作 标签: 线段树 题目链接 题意 给你一串序列,要你维护三个操作: 1.区间加法 2.区间取相反数 3.区间内任意选k个数相乘的积 题解 第三个操作看起来一脸懵逼啊. 其实 ...
- bzoj 1858 序列操作
bzoj 1858 序列操作 带有随机多个区间单值覆盖的区间操作题,可考虑用珂朵莉树解决. #include<bits/stdc++.h> using namespace std; #de ...
- bzoj 1283 序列 - 费用流
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求选出一些数使得原序列中每$m$个连续的数中不超过$K$个被选走.问最大的可能的和. 感觉建图好妙啊.. 考虑把问题转化成选$m$次数,每次 ...
- BZOJ 1251: 序列终结者 [splay]
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3778 Solved: 1583[Submit][Status][Discu ...
- BZOJ 1251: 序列终结者
1251: 序列终结者 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3773 Solved: 1579 [Submit][Status][Dis ...
- Bzoj 4403: 序列统计 Lucas定理,组合数学,数论
4403: 序列统计 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 328 Solved: 162[Submit][Status][Discuss] ...
- bzoj 维护序列seq(双标记线段树)
Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 4184 Solved: 1518[Submit][Status][Discus ...
- bzoj 2962 序列操作
2962: 序列操作 Time Limit: 50 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 有一个长度为n的序列, ...
随机推荐
- 很好的 DHCP协议与dhcpcd分析【转】
本文转载自:http://blog.csdn.net/gjsisi/article/details/18052369 第一部分 DHCP工作过程 DHCP的工作过程主要分为以下六个阶段: 发现 ...
- SQL Server中数据类型对应C#中数据类型
在SQL Server 2008中新建数据表的时候有33种数据类型可选,下面分别列举了这些类型对应的C#数据类型 //----------------------------------------- ...
- 跨域传输信息postMessage
widnow.postMessage()方法允许安全的跨域传输. Syntax otherWindow.postMessage(message, targetOrigin, [transfer]); ...
- DFS序+线段树(bzoj 4034)
题目链接 题目就不多说了. 本题目,可以用dfs序+线段树做:题目给定了一棵树,树上节点告诉了权值.我们可以先将这棵树进行dfs将一棵树变成线性结构:如图 变成这样后,然后就可以用线段树. 操作1:也 ...
- shell---rpm
[root@master src]# rpm -qpl epel-release-latest-6.noarch.rpm ##查询该rpm包安装了什么warning: epel-rel ...
- javascript之创建对象的方式
1.object构造函数创建 var obj=new Object(); obj.name='xue'; 2.对象字面量创建 var obj={ name:'xue' } 3.构造函数创建 funct ...
- mysql跨表更新示例
一.在同一个表中冗余存储记录之间的关系(组织机构树),查询时需要根据冗余字段进行关联查询 例如,下面的示例,用户表中有个字段friend标记其朋友关系,要求找出id=2及他的朋友(父节点) mysql ...
- 关于在项目中遇到MySQL数据库死锁的问题
在MySQL中, 当一个事务去更新某条数据, 还没有提交的时候, 第二个事务去更新该数据, 则会出现等待获取锁超时异常: >> Lock wait timeout exceeded; tr ...
- APP开发过程中需求变更流程
在APP开发过程中,不可避免的会有需求变更,从以往项目开发过程总结发现,需求变更太频繁,产品一句话需求,没有形成良好的版本迭代概念,频繁的变动影响开发交付日期,但是交付日期又是定死的,严重拖累了开发及 ...
- 【网络爬虫】【java】微博爬虫(一):小试牛刀——网易微博爬虫(自定义关键字爬取微博数据)(附软件源码)
一.写在前面 (本专栏分为"java版微博爬虫"和"python版网络爬虫"两个项目,系列里所有文章将基于这两个项目讲解,项目完整源码已经整理到我的Github ...