• Java实现 蓝桥杯VIP 算法训练 摆动序列


    问题描述
      如果一个序列满足下面的性质,我们就将它称为摆动序列:
      1. 序列中的所有数都是不大于k的正整数;
      2. 序列中至少有两个数。
      3. 序列中的数两两不相等;
      4. 如果第i – 1个数比第i – 2个数大,则第i个数比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。
      比如,当k = 3时,有下面几个这样的序列:
      1 2
      1 3
      2 1
      2 1 3
      2 3
      2 3 1
      3 1
      3 2
      一共有8种,给定k,请求出满足上面要求的序列的个数。
    输入格式
      输入包含了一个整数k。(k<=20)
    输出格式
      输出一个整数,表示满足要求的序列个数。
    样例输入
    3
    样例输出
    8

    import java.util.Scanner;
    
    
    public class 摆动序列 {
    	public static int [] v = new int [30];
    	public static int [] value = new int [30];
    	public static int n,ans=0;
    	public static void main(String[] args) {
    		Scanner sc =new Scanner(System.in);
    		n=sc.nextInt();
    		dfs(1);
    		System.out.println(ans-n);
    	}
    	public static void dfs(int x){
    	    if(x>n) return ;
    	    if(x==1||x==2){             //初始长度为1或者2时比较特殊 
    	        for(int i=1;i<=n;i++){
    	            if(v[i]==0){
    	                value[x]=i;
    	                v[i]=1;
    	                ans++;
    	                dfs(x+1);
    	                value[x]=0;     //每次记得还原回来就行了 
    	                v[i]=0;
    	            }
    	        }
    	    }
    	    else {
    	        if(value[x-1]>value[x-2]){  //下面分别是两种情况 
    	            for(int i=1;i<value[x-2];i++){
    	                if(v[i]==0){
    	                    ans++;
    	                    value[x]=i;
    	                    v[i]=1;
    	                    dfs(x+1);
    	                    value[x]=0;
    	                    v[i]=0;
    	                }
    	            }
    	        }
    	        else if(value[x-1]<value[x-2]){
    	            for(int i=value[x-2];i<=n;i++){
    	                if(v[i]==0){
    	                    ans++;
    	                    value[x]=i;
    	                    v[i]=1;
    	                    dfs(x+1);
    	                    value[x]=0;
    	                    v[i]=0;
    	                }
    	            }
    	        }
    	    }
    	}
    
    	
    
    }
    
    
  • 相关阅读:
    go学习中的零散笔记
    git reset --hard与git reset --soft的区别
    php必学必会
    gdb 解core
    php学习
    高仿京东到家APP引导页炫酷动画效果
    RxHttp
    SVN回滚文件
    遍历枚举
    python3 多线程
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948485.html
Copyright © 2020-2023  润新知