https://vjudge.net/problem/UVA-11212

题意:

n个数的排列,每次操作可以移动连续的一段

最问少移动多少次使这n个数升序排列

IDA*

估价函数:

考虑后即不正确的数字个数sum

每次移动最多使sum减少3

所以如果剩余递归层数*3<sum ,剪枝

#include<cstdio>
#include<cstring>
using namespace std;
int n,T,maxd;
bool stop;
bool check(int *a)
{bool p=true;for(int i=1;i<=n;i++)if(a[i]!=i)  { p=false; break; }return p;
}
void dfs(int now,int *a)
{if(stop) return;if(now==maxd+1) { if(check(a))  stop=true; return;}int sum=0;for(int i=1;i<n;i++) if(a[i+1]!=a[i]+1) sum++;if((maxd-now+1)*3<sum) return;int tmp[10];memcpy(tmp,a,sizeof(*tmp)*(n+1));for(int len=1;len<n;len++)for(int s=2;s+len-1<=n;s++)for(int pos=1;pos<s;pos++){for(int i=1;i<=len;i++) a[pos+i-1]=tmp[s+i-1];for(int i=pos,j=1;i<s;i++,j++) a[pos+len-1+j]=tmp[i];dfs(now+1,a);memcpy(a,tmp,sizeof(*a)*(n+1)); }
}
int main()
{int a[10]; while(scanf("%d",&n)==1){if(!n) return 0;T++; bool ok=true; stop=false;for(int i=1;i<=n;i++) {scanf("%d",&a[i]);if(a[i]<a[i-1]) ok=false;}if(ok) { printf("Case %d: 0\n",T); continue; }for(maxd=1;maxd<=n;maxd++){dfs(1,a);if(stop) { printf("Case %d: %d\n",T,maxd); break; }}}
}

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/7282164.html

uva 11212 Editing a Book相关推荐

  1. 紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*

    题目链接: https://vjudge.net/problem/UVA-11212 题意: 题解: IDA*,每次改变深度上限去剪枝 代码: 1 #include <bits/stdc++.h ...

  2. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  3. ajax如何做到异步交互,1.ajax简单实现异步交互

    效果:点击获取信息 testAjax.jsp: pageEncoding="UTF-8"%> Insert title here function getName(){ va ...

  4. UVA 10115 Automatic Editing (字符串的替换和查找)

    分析:水题,熟悉字符串的find和replace函数便可轻易解决 好久每一1A的题了,UVA的格式要求真是醉了,每次都得调试半天格式 #include <cstdio> #include ...

  5. UVA 10115 Automatic Editing

    字符串函数的应用. # include <cstdio> # include <cstring># define RULESN 10 + 5 # define MAXLEN 8 ...

  6. UVa 10115 - Automatic Editing

    题目:给你一些字符串的替换关系,以及一个句子.按顺序替换,输出最后结果. 分析:字符串.按照替换顺序依次替换(这个替换用过之后,就不再使用),每个替换可能出现多次. 这里注意,如果当前串中有多个可被当 ...

  7. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  8. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  9. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

最新文章

  1. 再说TCP神奇的40ms
  2. 基于AFNetworking3.0网络封装
  3. vuex中的getters
  4. css的input文本框的 propertychange、focus、blur
  5. my batis plus 小数没有0_Excel中的数据去掉小数点,教你3个函数解决!
  6. 对二进制文件的操作(c++ 程序设计 by 谭浩强 课本实例)
  7. Uva 11054 - Wine trading in Gergovia(模拟)
  8. alter table 加多个字段_多个单列索引和联合索引的区别详解
  9. 如何显示或隐藏Mac电脑右上角的声音图标
  10. fg、bg、jobs、、nohup、ctrl + z命令
  11. ubuntu修改IP后无法正常上网的解决
  12. win10系统如何配置web服务器,如何在windows10下搭建web服务器
  13. 汇编语言期末复习总结
  14. 一个更高效的RACK机制
  15. 设计模式——Revealing Module(揭示模块)模式
  16. qchart实现图片缩放 qt_Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例...
  17. vue IE兼容性问题汇总
  18. QQ推广,QQ在线代码
  19. 《英语语法新思维 基础版2》读书笔记(一)
  20. 魔域手游安卓修改服务器地址,魔域互通端游手游架设

热门文章

  1. 双机热备+Win2003下集群案例
  2. Error: Cannot find module 'babel-runtime/regenerator'
  3. leetcode 839 Similar String Groups
  4. 当谈论设备指纹时,我们到底在说什么?(转)
  5. codevs 2639 约会计划
  6. bzoj 4602: [Sdoi2016]齿轮
  7. Centos7源码安装mysql及读写分离,互为主从
  8. 转:人气资源大集合~~~2014年12月
  9. TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)
  10. 关于c++类中的指针成员问题