JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
来源:互联网 发布:网络打假教程 编辑:程序博客网 时间:2024/06/05 07:47
Description
给定一个1~n的排列x,每次你可以将x1~xi翻转。你需要求出将序列变为升序的最小操作次数。有多组数据。
Input
第一行一个整数t表示数据组数。
每组数据第一行一个整数n,第二行n个整数x1~xn。
Output
每组数据输出一行一个整数表示答案。
Sample Input
1
8
8 6 1 3 2 4 5 7
Sample Output
7
Data Constraint
对于100%的测试数据,t=5,n<=25。
对于测试点1,2,n=5。
对于测试点3,4,n=6。
对于测试点5,6,n=7。
对于测试点7,8,9,n=8。
对于测试点10,n=9。
对于测试点11,n=10。
对于测试点i (12<=i<=25),n=i。
Solution
别被题目吓到,这题的正解就是迭代加深搜索。
可是怎么剪枝呢(本人搜索能力较差)?
如果相邻两个数的差大于1(这样数对称之为逆对)的话,那么显然至少要一次交换才能换过来,
那么如果当前的交换次数加上逆对的个数大于当前迭代的深度,就可以直接退出了。
Code
#include<cstdio>#include<algorithm>using namespace std;int n,ans;bool pd;int a[26];inline int read(){ int X=0,w=1; char ch=0; while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();} while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar(); return X*w;}inline void dfs(int x,int y){ if(x+y>ans) return; bool p=true; for(int i=1;i<=n;i++) if(a[i]!=i){p=false;break;} if(p){pd=true;return;} for(int i=2;i<=n;i++) { int z=y; if(i<n) { if(abs(a[i]-a[i+1])==1) z++; if(abs(a[1]-a[i+1])==1) z--; } reverse(a+1,a+1+i); dfs(x+1,z); if(pd) return; reverse(a+1,a+1+i); }}int main(){ int T=read(); while(T--) { n=read(); int s=pd=0; for(int i=1;i<=n;i++) { a[i]=read(); if(i>1 && abs(a[i]-a[i-1])>1) s++; } for(ans=0;!pd;ans++) dfs(0,s); printf("%d\n",--ans); } return 0;}
阅读全文
1 0
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- 【JZOJ 5441】【NOIP2017提高A组冲刺11.1】序列
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- 【JZOJ 5442】【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ 5442. 【NOIP2017提高A组冲刺11.1】荒诞
- JZOJ 5440. 【NOIP2017提高A组冲刺11.1】背包
- jzoj5441【NOIP2017提高A组冲刺11.1】序列
- Jzoj5441【NOIP2017提高A组冲刺11.1】序列
- JZOJ5441. 【NOIP2017提高A组冲刺11.1】序列
- 【JZOJ 5445】【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5443. 【NOIP2017提高A组冲刺11.2】字典序
- jzoj【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5444. 【NOIP2017提高A组冲刺11.2】救赎
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
- 【JZOJ 5451】【NOIP2017提高A组冲刺11.4】Genocide
- 【JZOJ 5449】【NOIP2017提高A组冲刺11.4】Pacifist
- 说说大型网站可伸缩性架构的设计原理
- zookeeper+dubbo管理控制台实践
- 解决页面使用overflow: scroll在iOS上滑动卡顿的问题
- AJAX基础XMLHttpReqiest
- 【入门篇】Activiti设置局部变量两种方法
- JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列
- (HDOJ)1001——超级楼梯(递推)
- 用 logstash 解析 json 数组
- 12.1. 论数据库连接池的必要性
- Linux远程进入MySQL数据库的命令
- 二进制安装MySQL报错FATAL ERROR: Could not find my_print_defaults
- jquery属性过滤选择器,attr
- Gin开发02
- 简单比较init-method,afterPropertiesSet和BeanPostProcessor