다이나믹 프로그래밍

https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제 풀이 만약 스티커를 하나 떼어 냈다고 가정하면 다음에 뗄 수 있는 스티커는 한칸대각선 or 두칸 대각선이다. 즉 , 이 둘중에 큰 값을 선택하면 끝 반대로 말하면 이전의 스티커 점수의 합은 그림과 같이 둘 중 큰 곳에서 가져오면 된다. 파란색의 스티커를 떼어냈다고 가정을 하면 이전의 점수합은 빨간색 둘 중 큰 값을 가져오면 된다는것. 따라서 점화식은 1 2 3 4 5 6 7 8 9..
문제 https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 풀이 증가하는 수열 -> 감소하는 수열 형태로 나오기때문에 lis 알고리즘을 일단 떠올려야 한다. 왼쪽에서 출발하여 증가하는 수열을 DP로 접근하여 뽑은 결과를 DP1 오른쪽에서 출발하여 증가하는 수열을 DP로 접근하여 뽑은 결과를 DP2 for 문으로 0~수열의길이 까지 순회하여 DP1[i]+DP2[i]-1 이 가장 큰 값이 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18..
https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 문제 풀이 밑으로 진행 할 수록 , 최대한 값이 높게 나오게 합산하면서 내려오는 방식이다. 예제 입력처럼 주어진다면 "바로 위" 혹은 "왼쪽 위" 에서 값을 받아 내려올 수 있으므로 점화식은 => arr[i][j] = arr[i][j] + Math.max(arr[i-1][j],arr[i-1][j-1]); 이다. 하지만 왼쪽끝이나 오른쪽 끝에서는 둘 중에 큰 값을 받는것 대신 하나만 선택할 수 있으므로 그 조건만 추가하면 된다. 1 2 3 4 5 6 7 8 9 10 11..
https://www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 문제 풀이 첫 번째 집을 무슨 색으로 칠 하느냐에 따라서 결과가 달라지고 이전 집과는 다른 색을 칠해야 하므로 그리디로는 접근이 불가능하다. 만약 i 번째 집을 R로 색칠 하고 싶다고 가정을 하자. 그럼 i-1 번째 집은 R이 아니어야 한다. => i-1 번째집을 [G 로 색칠 했을때 총비용] 과 [B 로 색칠 했을때 총 비용] 중 작은 것을 선택 해야한다. 이런 식으로 하면..
https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 풀이 포도주시식 문제랑 비슷하다. 단 , 종결 조건이 정해져있다. 만약 n번째 계단을 갔다고 가정하면 갈 수 있는 경우의 수는 두 가지다. dp[i] 를 i번째 계단까지 갔을 때 , 얻을 수 있는 점수의 총 합이라고 가정하자. 1. 직전 계단을 밟는경우 연속 3번 계단을 건널 수 없으니 => dp[n] = dp[n-3] + n-1계단점수 + n계단 점수 2. 한칸 건너 뛰어 오는 경우 => dp[n] =..
김까따
'다이나믹 프로그래밍' 태그의 글 목록