zoukankan      html  css  js  c++  java
  • 摆动序列

    蓝桥杯 摆动序列
    问题描述
      如果一个序列满足下面的性质,我们就将它称为摆动序列:
      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 Main {
    	static int[] value = new int[22];
    	static int[] vis = new int[22];
    	static int k = 0;
    	static int ans = 0;//统计结果
    	public static void main(String args[]){
    		Scanner sc = new Scanner(System.in);
    		k = sc.nextInt();
    		sc.close();
    		dfs(1);
    		System.out.println(ans - k);
    	}
    	
    	private static void dfs(int step){
    		if(step > k)
    			return;
    		if(step==1 || step==2){		//初始化得把1考虑进去,输出结果的时候减掉n就行
    			for(int i=1;i<=k;i++){
    				if(vis[i] == 0){
    					value[step] = i;
    					vis[i] = 1;
    					ans++;
    					dfs(step+1);
    					value[step] = 0;	//这个下次还得用,需要还原最初的情况
    					vis[i] = 0;
    				}
    			}
    		}else{
    			if(value[step-1] > value[step-2]){
    				for(int i=1;i<value[step-2];i++){
    					ans++;
    					value[step] = i;
    					vis[i] = 1;
    					dfs(step+1);
    					value[step] = 0;
    					vis[i] = 0;
    				}
    			}else if(value[step-1] < value[step-2]){
    				for(int i=value[step-2]+1;i<=k;i++){
    					ans++;
    					value[step] = i;
    					vis[i] = 1;
    					dfs(step+1);
    					value[step] = 0;
    					vis[i] = 0;
    				}
    			}
    		}
    	}
    
    }
  • 相关阅读:
    [php代码]从svn获取指定版本,并同步到ftp上。
    java程序用pid重启
    Gearman安装,测试笔记
    ant编译android项目
    jquery代码收藏
    [读书笔记]读《code complete》有感
    无法解析的外部符号_main,该符号在函数_tmainCRTStartup中被引用
    4路电梯调度——pair program总结
    阅读作业2
    必应缤纷桌面的使用测试
  • 原文地址:https://www.cnblogs.com/techgy/p/12771760.html
Copyright © 2011-2022 走看看