백준 2218, 상자 안의 구슬
개요 문제 링크 골드 3, DP 원소를 제거하며 얻을 수 있는 점수의 최댓값 접근 접근 자체는 쉽지만 출력이 까다롭고 실수하기 좋다. 일단 N=1000이므로 O(N^2)에서 해결 가능. dp[i][j]를 만든다. A상자에 i개, B상자에 j개가 있을 때 얻을 수 있는 최대 점수를 저장한다. dp[2][n] 등을 사용하면 안된다는 점에 주의할 것. 그렇다면 비교할 값은? (i-1, j), (i, j-1), (i-1, j-1) 세 개가 된다. 각각 i, j개가 있으려면 i-1번째 a를 뽑거나, j-1번째 b를 뽑거나, 둘 다 뽑는 것이기 때문. 이때 (i-1,j-1)번째는 a[i-1]과 b[j-1]을 뽑을 때 얻는 점수를 더해줘야 한다. 따라서 dp[i][j] = max(dp[i-1][j], dp[i][j-..
2023. 2. 8.
백준 1577, 도로의 개수
개요 문제 링크 골드 5, DP 지나갈 수 없는 길을 고려한 2차원 경로 탐색 접근 K=50 으로 작으니까 길을 지나갈 수 없는지 찾을 때는 O(k)번 해주면 된다. 를 vector에 저장하고 find 하면 되겠구나 주의할 점 : 점의 대소관계를 고려하지 않고 입력이 들어오므로 비교해서 넣어주거나 넣은것에서 4가지를 찾아줘야 한다. 4가지 = (왼쪽,현재), (현재,왼쪽), (아래,현재), (현재,아래) Pseudo code vector.push({x1,y1}, {x2,y2}) for (세로) for (가로) if (왼쪽과 현재를 잇는 선분이 vector에 있으면) 왼쪽은 더하지 마라 if (현재와 왼쪽을 잇는 선분이 vector에 있으면) 왼쪽은 더하지 마라 if (아래와 현재를 잇는 선분이 vecto..
2023. 2. 8.