コーディングテスト練習記録

5752 ワード

2022.03.22 87日目


白駿13699号(点火式)


質問する


以下の点火式で定義される数列t(n)を考慮する.
t(0)=1
t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0)
この定義に基づいて、
t(1)=t(0)*t(0)=1
t(2)=t(0)*t(1)+t(1)*t(0)=2
t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5
...
与えられた入力0≦n≦35に対して、t(n)を出力するプログラムを記述する.

私の答え

  • デュアルfor文を使用して前後インデックス
  • を設定
  • 以降のインデックスはn-1であり、前のインデックスは0から
  • である.
  • DP形式のプール
  • import java.io.*;
    import java.util.*;
    
    public class Main {
        static long[] dp;
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            int n = Integer.parseInt(br.readLine());
    
            dp = new long[n + 1];
            dp[0] = 1;
    
            for (int i = 1; i <= n; i++) {
                long temp = 0;
                for (int j = i; j >= 1; j--) {
                    temp += dp[i - j] * dp[j - 1];
                }
                dp[i] = temp;
            }
    
            System.out.println(dp[n]);
        }
    }

    考える

  • DP解答練習