알고리즘 10

포도주 시식 / DP, 점화식 세우기

포도주 시식 분류 : DP난이도 : 3 / 5URL : https://www.acmicpc.net/problem/2156 평여러가지 형태로 변형되는 문제이다. 연속한 수의 합.. 계단 오르기 .. 등점화식을 잘 세우는게 관건이다. D[N] : N번 잔까지 마셨을때, 가장 최대로 마실 수 있는 수라고 하자. 포도주는 연속해서 3잔을 못마신다. 그렇다면, 몇가지 경우의 수로 분류할 수 있다. N 번째 잔에서 1. 안마시는 경우2. 1번째 연속으로 마시는 경우3. 2번째 연속으로 마시는 경우 1. 안마시는 경우는 그 전의 N-1에서 최대값이 N 번째 잔에서의 최대값이 될 것이다.D[N] = D[N-1] 2. 1번째 연속으로 마신다는 것은 그 전의 N-1은 마시지 않았단 소리이다. N-2는 마셨든 안마셨는 알 ..

알고리즘 2016.05.26

동물원 / DP, 점화식 세우기, 상태 점화식

동물원 분류 : DP난이도 : 1 / 5URL : https://www.acmicpc.net/problem/1309 평간단한 다이나믹 프로그램 문제이다.2 * N의 동물원이 있는데, 사자를 가로나 세로로 연이어 둘 수 없다. 모든 사자를 배치할 수 있는 경우를 세는 것이다. 처음에 사자의 수가 없어서 사자의 수를 0마리부터 N까지 증가시키면서 세려고 하였는데, 곧 안된다는 것을 알았다.점화식을 특별히 세울 수 없었기 때문이다. 그래서 동물원 칸수를 증가하면서 놓을 수 있는 경우를 체크하는 방향으로 코드를 작성하였다. D( N,0 ) 은 N번째 열에 사자를 두지 않는 경우의 최대 수D( N,1 ) 은 N번째 열에 왼쪽에 사자를 두는 경우의 최대 수D( N,2 ) 은 N번째 열에 오른쪽에 사자를 두는 경우의..

알고리즘 2016.05.26

붕어빵 판매하기 / DP, 점화식 세우기

붕어빵 판매하기 분류 : DP 난이도 : 2 / 5 URL : https://www.acmicpc.net/problem/11052 평 간단한 다이나믹 프로그래밍 문제이다. 점화식을 세우는 것이 관건이다. 문제를 간략이 표현하자면, 남은 붕어빵을 1개, 2개, 3개 ... N개씩 묶어 팔때, 가격이 다른데, 남은 붕어빵의 갯수를 최대이익으로 팔면, 그때의 최대이익은 얼마인가를 찾는 문제이다. 막무가내로 생각하면 어렵다. 단순히 INPUT의 값을 해당 INDEX로 나누어 마리당 가격을 계산해서 높은 것 부터 다 팔고... 남은 것은 2순위로 팔고 ... 이런 식으로 계산하면 몹시나 어렵다. 점화식을 세워서 DP로 풀어야한다. D[N]을 N마리를 팔 때, 최대이익이라고 하자. 그렇게 된다면 D[N]은 MAX(..

알고리즘 2016.05.26

욕심쟁이 판다 / 다이나믹 프로그래밍, DP, 알고리즘, deque

욕심쟁이 판다 분류 : DP난이도 : 3 / 5URL : https://www.acmicpc.net/problem/1937 평처음에는 스택을 이용한 방법으로 접근을 하였다. 모든 좌표에 대해서 스택에 넣고 팝을 하면서 좌우상하 네 방향을 모든 진행하면서 갈 수 있는 최대 depth를 측정하였다. 하지만, 정상적인 기능을 하지만 시간이 오래 걸렸다. 그래서 가지치기를 이미 계산이 된 부분은 하지 않도록 설정하였으나 그래도 시간 제한에 걸려버렸다. 그래서 전면 수정 리컬시브를 통한 DP로 푸는 방향으로 방향을 전환. #include #define max(a,b) a>b ? a : b #pragma warning(Disable:4996) #define MAX 501 using namespace std; int..

알고리즘 2016.05.26

6.6 게임판 덮기

(어렵다. 몹시 하아...) 문제를 보고 완전 탐색으로 풀지 결정을 내렸으면 아이디어와 규칙을 생각해야한다. 아이디어 생각시 중복을 피하기 위해선! 정해진 규칙에 의해서 차례대로 진행해야한다이 문제에선 블록을 놓을 시 왼쪽을 기준으로 또한 가장 상단을 기준으로 처음의 위치를 찾는다. 그렇게 된다면 그 상태에서 놓을 수 있는 블록의 모양은 4가지로 정의되며, 이것을 분명히 반복문안에서 차례대로 사용해야 하므로 자료구조를 잘 표 현 해 야 한 다 . ! ! ! 여기서는 3차원 배열을 사용해서 나타내었다. (x,y 좌표 2차원 + 갯 수를 나타내는 1차원 = 3차원 ) 그러면 완전 탐색 슈도 코드를 이용해야한다. int func_name(vactor para ...) { if (기저조건) return 1; ...

알고리즘 2016.04.05