nyoj 擅长排列的小名II
擅长排列的小明 II
- 描述
-
小明十分聪明,而且十分擅长排列计算。
有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列:
1、第一个数必须是1
2、相邻两个数之差不大于2
你的任务是给出排列的种数。
- 输入
- 多组数据。每组数据中输入一个正整数n(n<=55).
- 输出
- 输出种数。
- 样例输入
-
4
- 样例输出
-
4
用深搜也能得出答案,但是,,超时。。。。
神搜代码:#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;int n,sum;
bool flag[60];//判断1~n这些数是否使用过;
void DFS(int count,int m)
{
if(count==n)
{
sum++;
return ;
}
for(int i=1;i<=n;i++)
if((!flag[i])&&(fabs(i-m)<=2))//因为后面数可能比前面的数小,所以用fabs
{
flag[i]=true;
DFS(count+1,i);
flag[i]=false;
}
}int main()
{
while(cin>>n)
{
sum=0;
memset(flag,false,sizeof(flag));//全致为false(没使用过)
flag[1]=true;//1肯定使用过,因为第一个只能为1
DFS(1,1);//两个形参的含义:要判断的数的个数(计数作用,从一个数开始)和当前的数字是什么(从1开始)
cout<<sum<<endl;
}
return 0;
}dp:
#include <iostream>
#include <cstring>
using namespace std;int main()
{
int n;
while(cin>>n)
{
int dp[60];
memset(dp,0,sizeof(dp));
dp[0]=0;
dp[1]=1;
dp[2]=1;
for(int i=3;i<=55;i++)
dp[i]=dp[i-1]+dp[i-3]+1;
cout<<dp[n]<<endl;
}
return 0;
}/* 思路:
dp[i] 表示数字为i时的排列方法的总数;
首位必须为1,当第二位的数字等于2时:相当于给2~n个数排列(1~n-1)
当第二位的数字等于3时:
第三位可能为4 5 2
当第三位为4时,无论第四位取不取2都不满足题意(1 3 4 2 5 不满足||1 3 4 5 2 不满足)。
当第三位为2时,第四位为4,相当于求4~n的排列(1~n-3)。
当第三位为5时,1 3 5 7 9 ...2*n+1 2*n ... 6 4 2 只有这一种情况。
所以,dp[0]=0,dp[1]=dp[2]=1,dp[3]的情况等于dp[2]的情况+dp[0]的情况+1
...以此类推。
*/
nyoj 擅长排列的小名II的更多相关文章
- NYOJ 469 擅长排列的小明 II
擅长排列的小明 II 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1, ...
- 擅长排列的小明 II(找规律)
擅长排列的小明 II 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2, ...
- nyoj 19擅长排列的小明 (DFS)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- nyoj 题目19 擅长排列的小明
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- nyoj 19 擅长排列的小明(深搜,next_permutation)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- NYOJ469 - 擅长排列的小明 II - (dp)
题目描述: 小明十分聪明,而且十分擅长排列计算. 有一天小明心血来潮想考考你,他给了你一个正整数n,序列1,2,3,4,5......n满足以下情况的排列: 1.第一个数必须是1 2.相邻两个数之差不 ...
- ACM 擅长排列的小明
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- nyist oj 19 擅长排列的小明(dfs搜索+STL)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 小明十分聪明.并且十分擅长排列计算.比方给小明一个数字5,他能立马给出1-5按字典序的全排列,假设你想 ...
- nyoj_19_擅长排列的小明_201403011600
擅长排列的小明时间限制:1000 ms | 内存限制:65535 KB 难度:4描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他, ...
随机推荐
- 分享一下我进入IT行业的经历
今天突然根想写博客,就注册了一个,分享一下我的成长经历. 我第一次接触编程的时候是在上大学的时候,我学的专业是工程测量接触的第一个语言是vb,我记得很清楚,我当时写出第一个小Demo是的心情,感觉到了 ...
- 某厂java算法题实现及改进【有n个人成一圈,顺序排号(编号为1到n),从第一个人开始报数1到3报数】
一.第一种实现: 实现比较简单,直接贴现成的代码了,第一种实现: /** * 总人数 * * @param d */ private static void sortQuerry1(int d) { ...
- HUD-1999-不可摸数
参考博客https://www.cnblogs.com/dongsheng/archive/2012/08/18/2645594.html Problem Description s(n)是正整数n的 ...
- JavaScript的基本操作(一)
JavaScript中有大量的方法可供我们使用,详情可参考:http://jquery.cuishifeng.cn/这也同时导致我们不可能去记住每一个的用法,且开发者每天都在新添更多的方法,所以要想掌 ...
- C#多线程编程序--聊聊线程
这篇文章主要给您讲解几个基本问题,什么是线程?为什么要用线程?线程万能?这几个问题.我这篇博客是在该系列另外几篇博客之后写的,之所以不往下继续写,而是回到最初的问题,是因为我感觉到我没有很好的讲解开头 ...
- Unity的常用API
1.Event Function:事件函数 Reset() :被附加脚本时.在游戏物体的组件上按Reset时会触发该事件函数 Start() :在游戏初始化时会执行一次 Update() :每一帧 ...
- Logback.xml 给变量指定默认值
随着通用日志组件转入 Slf4j,logback 也变成了默认的日志实现,像 log4j 一样,logback.xml 中也可以使用系统属性或环境变量,如 ${catalina.home}.在 log ...
- redis集群离线安装
环境准备: redis-4.0.7.tar.gz redis的安装包 Ruby环境(集群搭建需要用ruby创建, ruby环境在2.2以上.) rubygems-2.7.4.tgz 和 redis-3 ...
- 大数据 --> 一致性Hash算法
一致性Hash算法 一致性Hash算法(Consistent Hash)
- Factorials
Factorials 阶乘 题目大意:给你一个数n,求出n ! 的最后一个非零位. 注释:n<=4200 想法:开始的想法是觉得这道题应该比较的有趣,因为我们知道,一个数的阶乘的最后的非零位后面 ...