점화식 : dp[i] = dp[i - 1] + dp[i - 2]
앞의 두 개의 수를 더한 값이 자신의 값이 됩니다.
이 문제는 N이 10000까지 오기때문에 long의 범위를 초과합니다.
자바에는 BigInteger라는 클래스가 있기때문에 이용 사용하여 쉽게 구할 수 있습니다.
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
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int N;
static void solve() {
BigInteger dp[] = new BigInteger[10001];
dp[0] = new BigInteger("0");
dp[1] = new BigInteger("1");
for (int i = 2; i <= N; i++) {
dp[i] = dp[i - 1].add(dp[i - 2]);
}
System.out.println(dp[N]);
}
static void input() throws Exception {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
}
public static void main(String[] args) throws Exception {
input();
solve();
}
}
|
cs |
'algorithm > dp' 카테고리의 다른 글
boj 1912 연속합 (0) | 2021.02.18 |
---|---|
boj 10211 Maximum Subarray (0) | 2021.02.18 |
boj 5569 출근 경로 (0) | 2021.02.06 |
boj 1010 다리 놓기 (0) | 2021.02.05 |
boj 5557 1학년 (0) | 2021.02.05 |