zoukankan      html  css  js  c++  java
  • 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
    ", ans );
    	}  
    	return 0; 
    } 
    

      

  • 相关阅读:
    《TZOJ1546》
    css3的基本样式
    PHP连接mysql数据库,并将取出的数据以json的格式输出
    使用ajax获取JSON数据的jQuery代码的格式
    使用构造函数来判断一个对象是数组还是日期
    js(jquery)代码在页面上实时地显示时间
    点分治总结
    线性基,高斯消元总结
    网络流总结
    后缀数组总结
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/8977115.html
Copyright © 2011-2022 走看看