2824: [AHOI2012]铁盘整理
2017-03-05 23:35
148 查看
2824: [AHOI2012]铁盘整理
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 377 Solved: 202
[Submit][Status][Discuss]
Description
在训练中,一些臂力训练器材是少不了的,小龙在练习的时候发现举重器械上的铁盘放置的非常混乱,并没有按照从轻到重的顺序摆放,这样非常不利于循序渐进的锻炼。他打算利用一个非常省力气的办法来整理这些铁盘,即每次都拿起最上面的若干个圆盘并利用器械的力量上下翻转,这样翻转若干次以后,铁盘将会按照从小到大的顺序排列好。那么你能不能帮小龙确定,最少翻转几次就可以使铁盘按从小到大排序呢?例如:下面的铁盘经过如图2.1所示的以下几个步骤的翻转后变为从小到大排列。
Input
共两行,第一行为铁盘个数N(1≤N≤50)。第二行为N个不同的正整数(中间用空格分开),分别为从上到下的铁盘的半径 R(1≤R≤100)Output
一个正整数,表示使铁盘按从小到大有序需要的最少翻转次数。Sample Input
52 4 3 5 1
Sample Output
5HINT
Source
[Submit][Status][Discuss]
很显然是个大力搜索,每次枚举该翻到哪里
这样的翻转有一个显然的性质,可以通过每两次操作将当前最上面的铁盘归为
只要先把这个铁盘翻到它应该在的位置上,再把其它铁盘翻回去,这样其它铁盘的位置都不受影响
因此,答案有个明显的上界为2*n
对于铁盘序列,统计当前状态下不应该相邻的铁盘有多少对,设为k
则至少需要k次翻转才能让所有铁盘归为,因为一次翻转最多增加一对应该相邻的铁盘
用这个优化搜索过程就行了
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<vector> #include<queue> #include<set> #include<map> #include<stack> #include<bitset> #include<ext/pb_ds/priority_queue.hpp> using namespace std; const int N = 55; int n,Ans,A ,B ; bool G[101][101]; void Swap(int k) { for (int i = 1; i <= k / 2; i++) swap(A[i],A[k - i + 1]); } void Dfs(int now,int tot) { if (now + tot >= Ans) return; bool pass = 1; for (int i = 1; i < n; i++) if (A[i] > A[i + 1]) {pass = 0; break;} if (pass) {Ans = now; return;} for (int i = 2; i <= n; i++) { int Nex = 0; Swap(i); for (int i = 1; i < n; i++) if (!G[A[i]][A[i + 1]]) ++Nex; Dfs(now + 1,Nex); Swap(i); } } int main() { #ifdef DMC freopen("DMC.txt","r",stdin); #endif cin >> n; Ans = 2 * n; for (int i = 1; i <= n; i++) scanf("%d",&A[i]),B[i] = A[i]; sort(B + 1,B + n + 1); for (int i = 2; i <= n; i++) G[B[i]][B[i-1]] = G[B[i-1]][B[i]] = 1; int tot = 0; for (int i = 1; i < n; i++) if (!G[A[i]][A[i + 1]]) ++tot; Dfs(0,tot); cout << Ans << endl; return 0; }
相关文章推荐
- [bzoj2824][AHOI2012]铁盘整理
- BZOJ 2824: [AHOI2012]铁盘整理
- bzoj 2824: [AHOI2012]铁盘整理
- BZOJ2824 洛谷P2534 [AHOI2012]铁盘整理
- [BZOJ]2824: [AHOI2012]铁盘整理 dfs
- [AHOI2012]铁盘整理
- IDA*——BZOJ2824/Luogu2534 [AHOI2012]铁盘整理
- BZOJ P2824[AHOI2012]铁盘整理
- 洛谷P2534 [AHOI2012]铁盘整理
- bzoj2824 铁盘整理【迭代加深搜索】
- bzoj2823[AHOI2012]信号塔
- 【AHOI2012】【BZOJ2822】树屋阶梯
- 17日,7月,2012 - 整理 | 争吵 | 思考 | Drupal managed_file
- 【bzoj2823】【AHOI2012】【信号塔】【随机增量法】
- 2012 Strata+Hadoop World演讲资料整理
- 2012-12互联网创意、创业项目整理
- bzoj2822: [AHOI2012]树屋阶梯
- 各大IT公司2012校园招聘笔试面试整理
- 洛谷P2532 [AHOI2012]树屋阶梯(Catalan数)
- 整理CVPR2012感兴趣的文章