https://www.acmicpc.net/problem/15989
15989번: 1, 2, 3 더하기 4
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2
www.acmicpc.net
풀이
전형적인 dp문제이다. 우선 단순 노가다로 풀어보다가 3번쨰마다 규칙이 있을거라는 추측을해본다.
두번째마다 1씩 올라가는 걸 확인 할 수 있다.
이걸 점화식으로 세우면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import java.util.*;
import java.io.*;
public class Main{
static int TC;
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
TC = Integer.parseInt(br.readLine());
dp = new int[10001]; dp[1] = 1; dp[2] = 2 ; dp[3] = 3;
float cnt=6;
for(int i=4;i<=10000;i++){
cnt = cnt/2;
dp[i] = dp[i-3] + (int)cnt;
cnt = cnt*2;
cnt ++;
}
while(TC-->0){
int input = Integer.parseInt(br.readLine());
System.out.println(dp[input]);
}
}
}
|
cs |
참고한 다른사람 풀이의 점화식
어떻게 이런걸 생각해내지 .. ? 역시 dp에 탁월한 사람은 달라도 뭔가 다른것 같다.
'알고리즘,PS > 백준' 카테고리의 다른 글
[BOJ] 백준 [16197] 두 동전 JAVA (0) | 2021.08.25 |
---|---|
[BOJ] 백준 [16930] 달리기 JAVA (0) | 2021.08.24 |
[BOJ] 백준 [1890] 점프 JAVA (0) | 2021.08.22 |
[BOJ] 백준 [1303] 전쟁 - 전투 JAVA (0) | 2021.08.21 |
[BOJ] 백준 [14888] 연산자 끼워넣기 JAVA (0) | 2021.08.20 |