hihocoder-1732-1-偏差排列

Posted zhang--yd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihocoder-1732-1-偏差排列相关的知识,希望对你有一定的参考价值。

hihocoder-1732-1-偏差排列 

#1732 : 1-偏差排列

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

如果一个1~N的排列P=[P1, P2, ... PN]中的任意元素Pi都满足|Pi-i| ≤ 1,我们就称P是1-偏差排列。

给定一个N,请你计算一共有少个不同的排列是1-偏差排列。

例如对于N=3,有3个1-偏差排列:[1, 2, 3], [1, 3, 2], [2, 1, 3]。

输入

一个整数N。  

对于50%的数据,1 ≤ N ≤ 15  

对于100%的数据,1 ≤ N ≤ 50

输出

一个整数表示答案

样例输入
3
样例输出
3

 

 

找规律,一个数字i,只能在i-1, i, i+1这三个位置存在。

dp[n][0] 表示第n个位置为n的合法数组种类数,dp[n][1]表示第n个位置为n-1,n在位置n-1的合法数组的种类数

  对于原本n个元素的数组,插入一个n+1,有两种插入方法,

放在n+1位置, 则dp[n+1][0] = dp[n][0] + dp[n][1]; 

放在n-1位置,  则 dp[n+1][1] = dp[n][0]; 

 

该种类数组成的序列是斐波纳挈序列。f[n] = f[n-1] + f[n-2]; 为其简化版本。

 

#include <cstdio> 
#include <cstdlib> 
const int MAXN = 100 + 10; 

int n;
long long ans, dp[MAXN][2]; 

void init(){
	dp[1][0] = 1; 
	dp[1][1] = 0;  
	for(int i=2; i<MAXN; ++i){
		dp[i][0] = dp[i-1][0] + dp[i-1][1]; 
		dp[i][1] = dp[i-1][0]; 
	}
}

int main(){

	init();  
	while(scanf("%d", &n) != EOF){
		ans = dp[n][0] + dp[n][1]; 

		printf("%lld\n", ans );
	}  
	return 0; 
} 

  

 

以上是关于hihocoder-1732-1-偏差排列的主要内容,如果未能解决你的问题,请参考以下文章

hihocoder1736 最大的K-偏差排列

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

11.2晚校内测试装桶模拟单调栈

R cut - 标签具有前瞻偏差

itertools 排列组合

单细胞mRNA测序技术