【UVa】11212 Editing a Book(IDA*)
题目
分析
get一下IDA*的技巧,感觉总体来说不难,主要是剪枝比较难想。
这是lrj的代码,比较通俗易懂,关键就是选定一个区间再取出来,插入到一个位置,接下来转移到这个状态。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=10;
int n,a[maxn];
bool is_sorted()
{
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(d*3+h() > maxd*3) return false;
if(is_sorted()) return true;
int b[maxn],olda[maxn];
memcpy(olda,a,sizeof(a));
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
{
//cut
int cnt=0;
for(int k=0;k<n;k++)
if(k<i || k>j) b[cnt++]=a[k];
//insert
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(a));
}
}
return false;
}
int solve()
{
if(is_sorted()) return 0;
int max_ans=5;
for(int maxd=1;maxd<max_ans;maxd++)
if(dfs(0,maxd)) return maxd;
return max_ans;
}
int main()
{
int kase=0;
while(scanf("%d",&n)==1 && n)
{
for(int i=0;i<n;i++) scanf("%d",&a[i]);
printf("Case %d: %d\n",++kase,solve());
}
return 0;
}
【UVa】11212 Editing a Book(IDA*)的更多相关文章
- 【UVa】1343 The Rotation Game(IDA*)
题目 题目 分析 lrj代码.... 还有is_final是保留字,害的我CE了好几发. 代码 #include <cstdio> #include <algorit ...
- 【UVA】10635 Prince and Princess(LCS)
题目 传送门:QWQ 分析 水题.$ O(nlogn) $的LCS 代码 #include <bits/stdc++.h> using namespace std; *, INF=1e9; ...
- 【UVa】1606 Amphiphilic Carbon Molecules(计算几何)
题目 题目 分析 跟着lrj学的,理解了,然而不是很熟,还是发上来供以后复习 代码 #include <bits/stdc++.h> using namespace std; ; stru ...
- 【UVA】12504 Updating a Dictionary(STL)
题目 题目 分析 第一次用stringstream,真TMD的好用 代码 #include <bits/stdc++.h> using namespace std; int ...
- 【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
题目 传送门:QWQ 分析 我好菜啊. 一波IDA*水过去了. 代码 #include <bits/stdc++.h> using namespace std; ; char s[maxn ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
随机推荐
- about system (pause) in cpp
Which is best way to pause the console in C++ programs? using cin.get() or using system("pause& ...
- Gradle2.0用户指南翻译——第一章. 介绍
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- Openflow1.3
Openflow1.3 协议标准
- python中类变量,成员变量
参考文献:http://www.jb51.net/article/54286.htm 转载.引用请附上参考文献的链接. (1)位置的区别 先看看下面这段代码: class TestClass(obje ...
- caffe学习3——layers
1 layer是模型的本质,是计算的基本单元.Layers convolve filters, pool, take inner products, apply nonlinearities like ...
- 实战maven私有仓库三部曲之二:上传到私有仓库
在上一章<实战maven私有仓库三部曲之一:搭建和使用>我们搭建了maven私有仓库,并体验了私有仓库缓存jar包的能力,避免了局域网内开发人员去远程中央仓库下载的痛苦等待,本章我们再来体 ...
- RBM
1. 玻尔兹曼分布: $$p(E) \thicksim e^{-E/kT} $$ 2. RBM 两层:隐层和可视层, $\mathbf v$, $\mathbf h$ $$v_i \in \{0, 1 ...
- [转]Java 8新特性探究(lambda)
原文地址:http://my.oschina.net/benhaile/blog/175012 目录[-] 函数式接口 Lambda语法 方法引用 总结 函数式接口 函数式接口(functional ...
- HDU2157 How many ways矩阵再识
春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线去教室 ...
- Session学习
Session学习 Session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie,这个JESSIONID对应这个服务器中的一个Session对象,通 ...