P1028 [NOIP 2001 普及组] 数的计算
题目描述
给出正整数 n,要求按如下方式构造数列:
- 只有一个数 n 的数列是一个合法的数列。
- 在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列。
请你求出,一共有多少个合法的数列。两个合法数列 a,b 不同当且仅当两数列长度不同或存在一个正整数 i≤∣a∣,使得 ai=bi。
输入格式
输入只有一行一个整数,表示 n。
输出格式
输出一行一个整数,表示合法的数列个数。
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();// dp[i] 表示以数字 i 结尾的合法数列数量int[] dp = new int[n + 1];for (int i = 1; i <= n; i++) {//只有 i 自己的数列,算1个dp[i] = 1;// 在 i 后面可以接 1 到 i/2 的任何数for (int j = 1; j <= i / 2; j++) {dp[i] += dp[j];}}System.out.println(dp[n]);sc.close();}}