다이나믹 프로그래밍 (6) 썸네일형 리스트형 타일 채우기 문제를 푸는 테크닉 1 이 게시글에서는 타일을 채우는 것과 관련한 문제에서 특수한 경우에 사용하는 기술을 알아본다. N * M 크기 격자의 상태를 정수 한 개로 표현하기 https://atcoder.jp/contests/abc196/tasks/abc196_d D - Hanjo AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp 길이가 1, 2인 블럭으로 H * W 크기의 격자를 채우는 가짓수를 출력하는 문제이다. 이 문제는 $HW \leq 16$이라는 조건과 이러한 타일링 문제에 적용되는 성질로 인해 재미있는 생각을 떠올릴 수 있다. 1. 어떤 행.. 백준 2688 - 줄어들지 않아 www.acmicpc.net/problem/2688 2688번: 줄어들지 않아 문제 어떤 숫자가 줄어들지 않는다는 것은 그 숫자의 각 자리 수보다 그 왼쪽 자리 수가 작거나 같을 때 이다. 예를 들어, 1234는 줄어들지 않는다. 줄어들지 않는 4자리 수를 예를 들어 보면 0011, www.acmicpc.net 각 자리의 숫자들이 단조 증가하는 수열을 구하는 문제이다. 1의 자리 숫자들은 문제에서 이야기하는 줄어들지 않음을 만족하므로 그 갯수를 1로 채우고 바텀업 DP를 통해 나머지 자리수들의 값을 채워나가면 된다. #include using namespace std; using ll = long long; ll dp[10][64]; int main() { for (int a = 0; a < 10; ++.. 백준 2624 - 동전 바꿔주기 www.acmicpc.net/problem/2624 각 고유한 가치를 지닌 동전의 개수가 주어졌을 때 금액 T를 만들 수 있는지, 가능하면 경우의 수가 몇 가지가 되는지 알아내는 문제이다. 2원이 4개 있다고 할 때 다음 테이블을 고려해보자. 금액 0 1 2 3 4 5 6 7 8 경우의 수 1 0 0 0 0 0 0 0 0 초기엔 0원을 만드는 경우도 인정하여 0원을 만드는 경우의 수를 1이라고 설정해 놓는다. 여기서 2원을 하나 가지고 테이블을 채워보자. 금액 0 1 2 3 4 5 6 7 8 경우의 수 1 0 1 0 0 0 0 0 0 자명하게도 1개의 2원 동전으로는 다음과 같이 테이블을 채울 수 있을 것이다. 여기서 2원을 하나 더 추가하면 다음과 같이 된다. 금액 0 1 2 3 4 5 6 7 8 경우.. 백준 3980 - 선발 명단 www.acmicpc.net/problem/3980 3980번: 선발 명단 문제 챔피언스 리그 결승전을 앞두고 있는 맨체스터 유나이티드의 명장 퍼거슨 감독은 이번 경기에 4-4-2 다이아몬드 전술을 사용하려고 한다. 오늘 결승전에 뛸 선발 선수 11명은 미리 골라두었� www.acmicpc.net 11명의 선수를 배치했을 때 최대 능력치를 구하는 문제이다. 11명을 전부 배치할 수 있는 TC만 주어지며 반드시 11명을 배치해야 한다는 점을 주의하자. 11명을 반드시 배치해야 한다는 조건에 주목하여 비트마스크 DP, 탐색 등의 방법을 통해 능력치의 최댓값을 찾도록 한다. 단, 비트마스크 DP를 이용시 다음과 같은 케이스에 유의하도록 한다. 1 10 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0.. 백준 15468 - 퇴사 2 www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net 상담을 통해 백준이가 얻을 수 있는 최대 수익을 구해보자. N이 최대 150만으로 꽤 크므로 완전탐색은 불가능하고 동적 계획법을 통해 문제를 풀어야 한다. 다음 점화식을 세워 풀이할 수 있다. 구하려는 최대 수익 earning에 대해 earning += max(idx 일에 상담을 실시 했을 때 벌 수 있는 수익, idx 일에 상담을 하지 않을 경우 벌 수 있는 수익) 본인의 코드에.. 이전 1 2 다음