UVA11212EditingABook

来源:互联网 发布:淘宝卖家在哪里发微淘 编辑:程序博客网 时间:2024/06/16 13:25
//UVA11212EditingABook#include<cstdio>#include<cstdlib>#include<cstring>const int MAXN = 10 + 5;int n;int a[MAXN];int maxd;bool is_sorted() {for(int i = 0; i < n - 1; i++) if(a[i + 1] <= a[i]) 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;//???}int dfs(int d) {    if(3 * d + h() > 3 * maxd) return false;if(is_sorted()) return true;//特判无须完成的情况     int b[MAXN] = {0}, olda[MAXN] = {0};    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];//保存未改变的数据     //cnt为此数据的长度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)) return true;memcpy(a, olda, sizeof(a));} }}return false;}int solve() {if(is_sorted()) return 0;for(maxd = 1; ; maxd++) {if(dfs(0)) return maxd;}}int main() {int kase = 0;//freopen("UVA11212out.txt", "w", stdout);while(scanf("%d", &n) == 1 && n) {    memset(a, 0, sizeof(a));for(int i = 0; i < n; i++) scanf("%d", &a[i]);printf("Case %d: ", ++kase);printf("%d\n", solve());}return 0;}/*62 4 1 5 3 653 4 5 1 20*/

原创粉丝点击