H、Magic necklace
链接:https://ac.nowcoder.com/acm/contest/3570/H
来源:牛客网
题目描述
There was a magic necklace. The necklace is made of magical gems
numbered 1 through n. Unfortunately, the necklace was accidentally
broken yesterday. Every gem was scattered on the ground. Now you need
to restring the magic necklace with these n gems. In order to keep the
necklace magical, adjacent numbered gems cannot be placed next to each
other in the new necklace. Please output the number of ways to
successfully restring the necklace. If the relative positions of the
gems are the same, we think these are the same case. 输入描述: The first
line of the input contains one integer t — the number of test cases.(t
≤ 110) The next t lines contain test cases. Each line contains a
positive integer n(0 ≤ n ≤ 11)describing a test case. 输出描述: For each
test case, output a line containing an integer which indicates the
answer.
示例1
输入
3
1
2
5
输出
1
0
1
说明
The two pictures above show the same method.
思路如下
数据范围最大就到n = 11,dfs爆搜即可得到答案,由于题面是多组,需要预处理出答案以免TLE,
还有这一题的去掉不符合题的情况也是很重要的
结题如下
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,Ans,t;
int vis[105],ans[15]; //vis存放每种情况,ans存储1~11个数字对应的答案
void dfs(int cur,int fa,int cnt,int x) //cnt表示递归了多少层、x表示要处理的数
{
if(cnt == x && cur != 2)
{
Ans++; //每种情况对应的方案数
return;
}
else if(cnt == x) return;
for(int i = 1;i <= x; i++)
{
if(vis[i]) continue;
if(i == fa || i == cur) continue;
if(abs(i - cur) == 1) continue;
vis[i] = 1;
dfs(i,cur,cnt + 1,x);
vis[i] = 0;
}
}
void init(int x){
for(int i = 1;i <= x; i++) vis[i] = 0;
vis[1] = 1; //这里我们假定对应没个数字方n 我的都让方案以 1 开头(所以要把vis[1]进行标记),既然对应每个数字n方案的开头为1,则结尾就一定不能为2
Ans = 0;
dfs(1,0,1,x);
ans[x] = Ans / 2; //这里的得到的方案数为什么要除以2 ? ,这是因为方案中会有一半是重复的(还是举数字 n == 3这个例子来说吧:1 3 5 2 4 6 与 1 6 4 2 5 3 除了开头相同,其它的部分完全就是颠倒一下,这对与题意来说这两种情款完全是相同的),下面给出6的所有出现的方案Ans(包括重复的)
/*
n == 6 的所有Ans方案数
1 3 5 2 4 6
1 3 5 2 6 4
1 3 6 4 2 5
1 4 2 5 3 6
1 4 2 6 3 5
1 4 6 2 5 3
1 5 2 4 6 3
1 5 3 6 2 4
1 6 3 5 2 4
1 6 4 2 5 3
*/
}
int main()
{
for(int i = 1;i <= 11; i++) init(i);
ans[1] = 1;
ans[0] = 0;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf("%d\n",ans[n]);
}
}
H、Magic necklace的更多相关文章
- 如何在项目中引入 #include .h、.lib、 .dll、.cpp (转)
源:http://blog.csdn.net/vippolka/article/details/8552735 在项目中引入.h..lib和dll.以及.cpp 1..h的引入 解决办法1:把 XX ...
- stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编
sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...
- stdafx.h是什么用处, stdafx.h、stdafx.cpp的作用
http://blog.csdn.net/songkexin/article/details/1750396 stdafx.h头文件的作用 Standard Application Fram Exte ...
- stdafx.h、stdafx.cpp的作用
这两个文件用于建立一个预编译的头文件".PCH"和一个预定义的类型文件"STDAFX.OBJ".由于MFC体系结构非常大,各个源文件中都包含许多头文件,如果每次 ...
- sed初理多行合并+sed之G、H、g、h使用+sed n/N使用说明
转载:[shell]sed处理多行合并 - seyjs - 博客园 (cnblogs.com) 文件格式 table=t1 name owner address table=t2 id text co ...
- 合理编写C++模块(.h、.cc)
模块划分 合理编写模块的 demo.h.demo.cc 下例为C++为后端服务编写的探活检测服务 health_server.h #ifndef HEALTH_SERVER_H #define HEA ...
- <string> 与<string.h>、<cstring>的区别
<string.h> <string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <cstring> 在C++标准化(1998年 ...
- C/C++ - <string> 与<string.h>、<cstring>的区别
<string.h><string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <string><string>是C ...
- Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析
在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件.这里主要介绍几个比较关键的文件 1.linux-2. ...
随机推荐
- NetAnalyzer笔记 之 十一 打造自己的协议分析语言(1)初衷与语法构想
回头看看NetAnalyzer开发系文档上次一篇竟然是2016年,老脸一红.不过这几年墨云成功过的讨到一个温柔贤淑的老婆,有了一个幸福的家庭,去年9月又有了一个大胖儿子,想想也就释然了^_^ 其实这几 ...
- SpringBoot1.5.10.RELEASE配置mybatis的逆向工程
在application.properties配置扫描等,不做多说 1.在pom配置文件中引入mybatis和mysql的依赖,如下: <dependency> <groupId&g ...
- 整合Kafka+Flink 实例(第二部分 设计思路)
前 言 拖了蛮久了,一直说要接着上一部分写设计思路以及代码,因为自己技术底子薄弱,加上人又懒,所以一直没能继续,今天补上设计思路及部分代码,后面有时间我会再补充一些应用性的功能,的确有些忙,希 ...
- Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试
前言 昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下Docker + Traefik v2.1.6 ,以下是一些配置的总结,初次接触,大佬勿喷. 我的系统环境是 Ubuntu 18.04.3 LTS ...
- MySQL敏感数据加密及解密
大数据时代的到来,数据成为企业最重要的资产之一,数据加密的也是保护数据资产的重要手段.本文主要在结合学习通过MySQL函数及Python加密方法来演示数据加密的一些简单方式. 1. 准备工作 为了便于 ...
- Flutter 日期时间DatePicker控件及国际化
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 DatePicker Flutter并没有DatePick ...
- svn 追责神器 blame vscode - SVN Gutter
svn 追责神器 blame vscode - SVN Gutter
- 《JavaScript 模式》读书笔记(2)— 基本技巧3
这是基本技巧的最后一篇内容,这篇内容示例代码并不多.主要是概念比较多一点. 编码约定 确定并一致遵循约定比这个具体约定是什么更为重要. 一.缩进 无论是使用tab还是空格,只要是一致遵循的,是什么并不 ...
- 动手建立jdbc连接
工具:Idea Navicat 环境:jdk 1.8 mysql-5.7.27-winx64 创建一个project 打开navicat开启连接. 在idea中导入数据库. 导入好后可以开始连接了 ...
- JVM的组成
JVM一共有五大区域,程序计数器.虚拟机栈.本地方法栈.Java堆.方法区. 程序计数器 程序技术器是一块很小的内存空间,由于Java是支持多线程的.当线程数大于CPU数量时,CPU会按照时间片轮寻执 ...