hdu1016 Prime Ring Problem
2015-08-16 13:14
357 查看
dfs,用全局数组和变量保存并更新当前状态。
答案可以直接在搜索结束时打印,n为奇数时方案数为0。
acm.hdu.edu.cn/showproblem.php?pid=1016
View Code
答案可以直接在搜索结束时打印,n为奇数时方案数为0。
acm.hdu.edu.cn/showproblem.php?pid=1016
#include <cstdio> #include <cstring> using namespace std; const int maxn = 20; int n; int ans[maxn], k; bool isprime[50]; bool vis[20]; void init(){ memset(isprime, 0, sizeof isprime); isprime[2] = isprime[3] = 1; for(int i = 5; i <= 50; i += 2){ bool ok = 1; for(int j = 3; j * j <= i; j += 2){ if(i % j == 0){ ok = 0; break; } } isprime[i] = ok; } memset(vis, 0, sizeof vis); } void dfs(int u){ //finished num is u if(u == n && isprime[1 + ans[n - 1]]){ printf("%d", ans[0]); for(int i = 1; i < k; i++) printf(" %d", ans[i]); printf("\n"); } for(int i = 1; i <= n; i++){ if(!vis[i] && isprime[i + ans[u - 1]]){ vis[i] = 1; ans[k++] = i; dfs(u + 1); vis[i] = 0; --k; } } } void solve(){ init(); k = 0; ans[k++] = 1; vis[1] = 1; dfs(1); } int main(){ int kase = 0; while(~scanf("%d", &n)){ printf("Case %d:\n", ++kase); solve(); printf("\n"); } return 0; }
View Code
相关文章推荐
- cocos2d-x3.0 lua学习(一个)
- Android 基础:surfaceSurface、SurfaceHolder 及 SurfaceHolder.Callback , 范例说明
- gcd vijos1279 Leave-绿光
- 6410的中断控制系统学习
- 关于IFeatureSelection的SelectFeatures方法
- POJ2566--Bound Found(尺取法)
- Draw Something
- 二叉搜索树(Binary Search Tree)的插入与删除
- AutoCAD.Net/C#.Net QQ群:193522571 将坐标系置为WCS
- UITableView的协议传值
- mark--[Redis用户添加、分页、登录、注册、加关注案例]
- 选择文件错误提示
- Logback manual 翻译
- 业务目标至上
- 详解Unity中的委托与事件
- C++ Primer 学习笔记与思考_6 数组和动态数组易错点解读
- Java Socket编程
- 【转载】软件开发模型介绍、总结归纳
- bind的编译安装以及压力测试工具queryperf的使用
- postgis常用函数介绍(一)