编辑书稿

来源:互联网 发布:电影不能有鬼知乎 编辑:程序博客网 时间:2024/04/29 06:25
// by BNU_LZM#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 10;int n, a[maxn];bool check(){for(int i = 0; i < n-1; i++)if(a[i] > a[i+1]) return false;return true;}int h(){int cnt = 0;for(int i = 0; i < n-1; i++)if(a[i]+1 != a[i+1]) cnt++;if(a[n-1] != n) cnt++;return cnt;}bool dfs(int d, int maxd){if(check()) return true;if(d == maxd) return false;if(3*(maxd-d) < h()) return false;int b[maxn], olda[maxn];memcpy(olda, a, sizeof(a));for(int i = 0; i < n; i++){for(int j = i; j < n; j++){int cnt = 0;for(int k = 0; k < n; k++) if(k < i || k > j) b[cnt++] = a[k];for(int k = 0; k <= cnt; k++){int cnt2 = 0;for(int p = 0; p < k; p++) a[cnt2++] = b[p];for(int p = i; p <= j; p++) a[cnt2++] = olda[p];for(int p = k; p < cnt; p++) a[cnt2++] = b[p];if(dfs(d+1, maxd)) return true;}memcpy(a, olda, sizeof(olda));}}return false;}int solve(){if(check()) return 0;for(int maxd = 1; maxd < 8; maxd++){if(dfs(0, maxd)) return maxd;}return 8;}int main(){while(scanf("%d", &n) == 1 && n){for(int i = 0; i < n; i++) scanf("%d", &a[i]);printf("%d\n", solve());}return 0;}

0 0
原创粉丝点击