zoukankan      html  css  js  c++  java
  • Java实现蓝桥杯模拟正整数序列的数量

    问题描述
      小明想知道,满足以下条件的正整数序列的数量:
      1. 第一项为 n;
      2. 第二项不超过 n;
      3. 从第三项开始,每一项小于前两项的差的绝对值。
      请计算,对于给定的 n,有多少种满足条件的序列。
    输入格式
      输入一行包含一个整数 n。
    输出格式
      输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
    样例输入
    4
    样例输出
    7
    样例说明
      以下是满足条件的序列:
      4 1
      4 1 1
      4 1 2
      4 2
      4 2 1
      4 3
      4 4
    评测用例规模与约定
      对于 20% 的评测用例,1 <= n <= 5;
      对于 50% 的评测用例,1 <= n <= 10;
      对于 80% 的评测用例,1 <= n <= 100;
      对于所有评测用例,1 <= n <= 1000。

     
    
    package 第十三次模拟;
    
    import java.util.Scanner;
    
    public class Demo8序列 {
    	public static int n=0,count=0;
    	public static int [] []map ;
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		 n =sc.nextInt();
    		 sc.close();
    		 map = new int [n+1][n+1];
    		 for (int i = 1; i <=n; i++) {
    			map[i][i]=1;
    			map[i][0]=1;
    			map[0][i]=1;
    		}
    		 for (int i = 1; i <=n; i++) {
    			count+=f(n,i);
    			count%=10000;
    //			System.out.println(count);
    		}
    		 System.out.println(count);
    //		 System.out.println(f(4,2));
    		 
    	}
    	public static int f(int x,int y){
    		if(map[x][y]!=0){
    			return map[x][y];
    		}
    		for (int i = Math.abs(x-y)-1; i>=0; i--) {
    			map[x][y]+=f(y,i);
    		}
    		map[x][y]%=10000;
    //		map[y][x]=map[x][y];
    //		System.out.println();
    		return map[x][y];
    	}
    
    }
    
    
    
    
    package 第十三次模拟;
    
    import java.util.Scanner;
    
    public class 正整数序列 {
    	public static int n = 0, count = 0;
    	public static int[][] map;
    
    	public static void main(String[] args) {
    		long start = System.currentTimeMillis();
    		Scanner sc = new Scanner(System.in);
    		n = sc.nextInt();
    		sc.close();
    		map = new int[n + 2][n + 2];
    		for (int i = 1; i <= n; i++) {
    			map[i][i] = 1;
    			map[i][0] = 1;
    			map[0][i] = 1;
    			map[i][i - 1] = 1;
    			map[i - 1][i] = 1;
    			// map[i+1][i]=1;
    			// map[i][i+1]=1;
    
    			// for (int j = i-1; j>=0; j--) {
    			// for (int j2 = Math.abs(i-n)-1; j2 >=0; j2--) {
    			// map[n][i]+=map[i][j2];
    			// }
    			// map[n][i]%=10000;
    			//// }
    			// System.out.println(map[n][i]);
    			// count+=map[n][i];
    		}
    		for (int i = 1; i <= n; i++) {
    			// System.out.print(n+" "+i+" "+map[n][i]+" ");
    			if (map[n][i] == 0) {
    
    				for (int j2 = 0; j2 <= Math.abs(i - n) - 1; j2++) {
    					if (map[i][j2] == 0) {
    						f(i, j2);
    						// for (int j = 0; j<=Math.abs(i-j2)-1; j++) {
    						// map[i][j2]+=map[j2][j];
    						// }
    						// map[j2][i]=map[i][j2];
    					}
    					map[n][i] += map[i][j2];
    					// System.out.print(i+" "+j2+" ");
    				}
    				map[n][i] %= 10000;
    			}
    			// }
    
    			// System.out.println(n+" "+i+" "+map[n][i]);
    			// System.out.println(map[n][i]);
    			count += map[n][i];
    			count %= 10000;
    			// if(map[i][n]==0)
    			map[i][n] = map[n][i];
    			// count+=f(n,i);
    			// count%=10000;
    			//// System.out.println(count);
    		}
    		System.out.println(count);
    		long end = System.currentTimeMillis();
    		System.out.println(end - start);
    		// System.out.println(f(4,2));
    
    	}
    
    	public static int f(int x, int y) {
    		if (map[x][y] != 0) {
    			return map[x][y];
    		}
    		for (int i = Math.abs(x - y) - 1; i >= 0; i--) {
    			map[x][y] += f(y, i);
    		}
    		map[x][y] %= 10000;
    		// map[y][x]=map[x][y];
    		// System.out.println();
    		return map[x][y];
    	}
    
    }
    
    
  • 相关阅读:
    前端性能优化
    CSS实现文字在容器中对齐方式
    spring里面的context:component-scan
    Builder模式
    idea无法新建maven项目
    Java-位运算
    pg数据库数据表异常挂起
    Java-多线程与单例
    Java-数据结构之二叉树练习
    Java-JNA使用心得
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075180.html
Copyright © 2011-2022 走看看