dp[i][j] = dp[i-1][0]+dp[i-1][1]+...dp[i-1][j-1]
인 이유를 살펴보겠습니다.
이러한 규칙을 옮긴 게 바로 위 점화식입니다. dp[i-1][0]은 D를 M개 훔쳐 A,B,C를 총 0개 훔치는 경우, dp[i-1][1]은 D를 M-1개 훔쳐 A,B,C를 총 1개 훔치는 경우, dp[i-1][j-1]은 D를 1개 훔쳐 A,B,C를 총 M-1개 훔치는 경우입니다.
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[][] dp = new int[N][M];
Arrays.fill(dp[0], 1);
for (int i = 1; i < N; i++) {
for (int j = i; j < M; j++) {
int sumVal = 0;
for (int k = 0; k <= j-1; k++) {
sumVal += dp[i-1][k];
}
dp[i][j] = sumVal;
}
}
System.out.println(dp[N-1][M-1]);
}
}