白駿2225号(Java)
DP
Javaで白俊2225号を解読しました.
あなたのDPへ
質問リンクを添付します.
https://www.acmicpc.net/problem/2225
点火式を探す
最も多く出現する形なので、複数の数字の和を2つの和に変換する原理を利用して点火式を探そうとしたが、結局見つからなかった.
人の解答を見るたびに「あ…」しかしいずれにしても、解決できなかったのは解決できなかった......ううう
2つの数だけで
コードは以下の通りです.
先生.
Javaで白俊2225号を解読しました.
あなたのDPへ
質問リンクを添付します.
https://www.acmicpc.net/problem/2225
点火式を探す
最も多く出現する形なので、複数の数字の和を2つの和に変換する原理を利用して点火式を探そうとしたが、結局見つからなかった.
人の解答を見るたびに「あ…」しかしいずれにしても、解決できなかったのは解決できなかった......ううう
0~N
個からK
個を用いた点火式を作成するため、N
を発表した.int[][] dp = new int[K+1][N+1]
はdp[k][n]
の数字であり、k
を生成できる数を示す.2つの数だけで
n
が製造できると考えられる場合、以下の点火式を導出することができる.n
dp[k][n] = dp[k-1][n] + dp[k][n-1]
個の数でk-1
を作り、n
を加えればいいです.0
個の数でk
を作り、n-1
を加えればいいです.コードは以下の通りです.
import java.io.*;
import java.util.StringTokenizer;
public class boj2225 {
static int N,K;
static int[][] dp;
static Integer solution(){
dp = new int[K+1][N+1];
for(int i=1; i<=K; i++)
dp[i][1] = i;
for(int i=1; i<=N; i++)
dp[1][i] = 1;
for(int i=2; i<=K; i++){
for(int j=2; j<=N; j++){
dp[i][j] = (dp[i][j-1] + dp[i-1][j]) % 1000000000;
}
}
return dp[K][N];
}
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(bfr.readLine());
N = Integer.parseInt(stk.nextToken());
K = Integer.parseInt(stk.nextToken());
System.out.println(solution());
}
}
DPをちゃんと解きたい先生.
Reference
この問題について(白駿2225号(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@topqr123q/백준-2225번-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol