728x90
반응형
https://www.acmicpc.net/problem/9095
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static int n, t;
public static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
t = Integer.parseInt(br.readLine());
int[] count = new int[t];
dp = new int[12];
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int k = 4; k <= 11; k++) {
dp[k] = dp[k - 1] + dp[k - 2] + dp[k - 3];
}
for (int i = 0; i < t; i++) {
n = Integer.parseInt(br.readLine());
count[i] = dp[n];
}
for (int s : count) {
System.out.println(s);
}
}
}
|
cs |
f[1]은 1 -->1개
f[2]는 1 1, 2 -->2개
f[3]은 1 1 1 , 1 2, 2 1, 3 -->4개
f[4]=7
그렇다면 f[5]는 몇개 일까?
1 1 1 1 1 -->1개
1 1 1 2 --> 자리 바꾸는 거 까지 고려하면 4!/3! 으로 4개
1 1 3-->3!/2!=3
2 2 1-->3!/2!=3
2 3 -->2!=2
총 13이다.
그럼 여기서 규칙을 발견할 수 있다. f[5]=f[4]+f[3]+f[2]이 되는 것이다.
그렇기에 4이상 부터는 f[n]=f[n-3]+f[n-2]+f[n-1] 의 점화식을 이용할 수 있다!
728x90
반응형
'알고리즘 > DP' 카테고리의 다른 글
[java 백준] 실버 3/ 11727번 2xn타일링 2 (0) | 2021.07.30 |
---|---|
[java 백준] 실버 3/ 11726번 2 x n 타일링 (0) | 2021.07.28 |
[DP 개념] #2_동적계획법(1) (0) | 2021.07.28 |
[java 백준] 실버 3/ 1463번, 1로 만들기 (0) | 2021.07.27 |
[DP 개념] Dynamic Programming#1_피보나치 수열,Memoization,Bottom-up 방식 (0) | 2021.07.26 |
댓글