【暴力搜索】[UVa 11212]Editing a Book
来源:互联网 发布:程序员必学课程 编辑:程序博客网 时间:2024/06/04 17:42
就是纯暴力,每次枚举起点中点和向后移动的步数,加上if(dif(now) + 3 * (u-1) > 3 * maxd) return false;优化dif(now)表示每一位的后面是否是正确的
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct State{int s[11];};int n, maxd;int dif(State s){ int ret = 0; for(int i=1;i<n;i++) if(s.s[i+1]!=s.s[i]+1) ret++; if(s.s[n]!=n) ret++; return ret;}State rret;void move_back(State st, int i, int j, int bk){ for(int k=1; k<= bk; k++) rret.s[i+k-1] = st.s[j+k]; for(int k=i; k<=j; k++) rret.s[k+bk] = st.s[k];}bool dfs(int u, State now){ State tmp; if(u > maxd) return dif(now) == 0; if(dif(now) + 3 * (u-1) > 3 * maxd) return false; int bend; for(int i=1;i<=n;i++) for(int j=i;j<=n;j++){ bend = n-j; for(int back=1;back<=bend; back++){ rret = now; move_back(now, i, j, back);tmp = rret; if(dfs(u+1, tmp)) return true; } } return false;}int main(){ int ccnt=0;State be; while(scanf("%d", &n)!=EOF && n){ for(int i=1;i<=n;i++) scanf("%d", &be.s[i]); maxd = 0; while(!dfs(1, be)) maxd++; printf("Case %d: %d\n",++ccnt, maxd); } return 0;}
0 0
- 【暴力搜索】[UVa 11212]Editing a Book
- UVa 11212 Editing a Book
- UVA - 11212(Editing a Book)
- UVA - 11212 Editing a Book
- UVa 11212 Editing a Book
- uva 11212 - Editing a Book
- UVa 11212 - Editing a Book
- UVA 11212 Editing a Book
- uva 11212 Editing a Book
- [UVA] 11212 Editing a Book
- 【UVA】11212-Editing a Book(IDA*搜索减枝)
- UVa 11212 - Editing a Book <状态空间搜索+IDA*算法>
- uva-11212 - Editing a Book 状态空间搜索,IDA*
- [UVa 11212] Editing a Book (迭代加深搜索)
- Editing a Book UVA
- Editing a Book UVA
- Editing a Book UVA
- Editing a Book UVA
- 成员函数类型 成员函数指针
- 读书笔记:大小端模式对位域的影响
- Linux下批量重命名文件bash命令详解
- 移动APP产品经理必学的工具和必上的酷站
- POJ 3270 Cow Sorting(置换环)
- 【暴力搜索】[UVa 11212]Editing a Book
- 收藏网站57
- Divide Two Integers
- source insight使用记录
- POJ3696 The Luckiest number 欧拉函数应用
- 收藏网站58
- NodeHTTP模块
- Trinitycore 物品,任务,生物 生成器
- android.view.ContextThemeWrapper cannot be cast to android.app.Activity