[白俊]225:合分解


質問する



問題を解く


  • N=1の場合、整数KにNを加えた場合の数は以下のようになる.
    k = 1 -> 1
    - dp[1][1] = 1
    k = 2 -> 0 + 1, 1 + 0
    - dp[1][2] = 2
    k = 3 -> 0 + 0 + 1, 0 + 1 + 0, 1 + 0 + 0
    - dp[1][3] = 3
    dp[1][i] = i

  • K=1の場合、整数NはNプラス1のみとなります.
    dp[i][1] = 1

  • dp[N][K]
    −K−1個を用いてNを作る方法に0を加えるとK個を用いたのと同じであり、dp[N][K−1]の場合は個数を加える.
    −K個を用いてN−1を作成する方法に1を加えるとNになる.
    dp[N-1][K]の場合、個数を加算できます.
    dp[N][K] = dp[N][K-1] + dp[N-1][K]
  • コード#コード#

    import java.util.Scanner;
    
    public class ANS2225 {
    
        static int N, K;
        static long dp[][];
        static int mod =  1000000000;
    
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
    
            N = sc.nextInt();
            K = sc.nextInt();
    
            //dp선언 및 초기화
            dp = new long[N+1][K+1];
    
            for(int j = 1 ; j <= K; j++){
                dp[1][j] = j;
            }
    
            for(int i = 1; i <= N; i++){
                dp[i][1] = 1;
            }
    
    
            for(int i = 2 ; i <= N; i++){
                for(int j = 2 ; j <= K; j++){
    
                    dp[i][j] = (dp[i][j-1] + dp[i-1][j])%mod;
    
                }
            }
    
            System.out.println(dp[N][K]);
    
    
        }
    }