일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 심리학
- 회피
- Android
- javap
- 여행
- extends
- 취약점
- bytecode 분석
- abstract
- Interface
- 일상탈출
- 치유
- Shared Elements
- opcode
- static
- Recylcer
- HelloWorld
- ㅇ
- 보안
- 보안취약점
- IMPLEMENT
- 심리여행
- jvm
- 버킷리스트
- throws
- 여행계획
- Navigation Component
- Transition
- bytecode
- 일상회피
Archives
- Today
- Total
패스트터틀
(Baekjoon) dp - (6) 타일 채우기 3 본문
https://www.acmicpc.net/problem/14852
dp(n) = 2*dp(n-1) + 3*dp(n-2) + 2*(dp(n-3) + dp(n-4) + dp(n-5) + ....+ dp(0))
위의 그림과 같은 과정을 통해 위의 점화식을 도출할수 있다.
그리고 코드를 짜서 제출할경우 시간초과를 겪는데 그러한 이유를 살펴보면은
2*(dp(n-3) + dp(n-4) + dp(n-5) + ....+ dp(0)) 부분에서 계속 구한값을 다시 계산하고 다시계산하는것을 알수있다.
이부분 또한 동적프로그래밍 기법을 적용하여서 한번구한값은 다시 구하지 말자라는 방식을 써야한다.
int는 값이 작아서 그런가 실패가 떠서 long으로 바꿔주었다.
컴퓨터에게 두번일시키지말아라!!! 그것이 동적프로그래밍의 핵심이다.!!
동적프로그래밍이 가능한 경우라면 동적프로그래밍으로 최소한의 계산으로 최대한의 속도를 내야한다.
package dp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _14852{
static int n;
static long d[][] = new long[1000000][2];
static long dp(int c){
d[0][0] = 0;
d[1][0] = 2;
d[2][0] = 7;
d[2][1] = 1;
for(int i = 3 ; i <= c ; i++){
d[i][1] = (d[i-1][1] + d[i - 3][0]) % 1000000007;
d[i][0] = (2*d[i-1][0] + 3*d[i-2][0] + 2*d[i][1]) % 1000000007;
}
return d[c][0];
}
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
System.out.println(dp(n));
}
}
참고 : https://www.youtube.com/watch?v=kYoKLm8BZtI&t=300s
백준문제풀이Github :
https://github.com/sdk0213/baekjoon-study
'Algorithm > baekjoon' 카테고리의 다른 글
(Baekjoon) brute-force + dp - (1) 부분수열의 합( + 부분집합 출력) (0) | 2019.12.07 |
---|---|
(Baekjoon) brute-force - (1) 부분수열의 합( + 부분집합 출력) (0) | 2019.12.07 |
(Baekjoon) dp - (5) 타일 채우기 (0) | 2019.11.29 |
(Baekjoon) dp - (4) 피보나치 (0) | 2019.11.28 |
(Baekjoon) dp - (3) 외판원 순회 (0) | 2019.11.22 |
Comments