본문 바로가기

동적계획법

[알고스팟/ALGOSPOT] 18. ASYMTILING 이번 문제는 ASYMTILING 라는 문제입니다!! 이 문제는 전의 TILING2의 문제와 굉장히 유사합니다. ASYMTILING(출처 : https://algospot.com/judge/problem/read/ASYMTILING) 문제 ID시간 제한메모리 제한제출 횟수정답 횟수 (비율)ASYMTILING1000ms65536kb1099570 (51%)출제자출처분류JongMan알고리즘 문제 해결 전략보기문제 그림과 같이 2 * n 크기의 직사각형을 2 * 1 크기의 타일로 채우려고 합니다. 타일들은 서로 겹쳐서는 안 되고, 90도로 회전해서 쓸 수 있습니다. 단 이 타일링 방법은 좌우 대칭이어서는 안 됩니다. 위 그림은 2 * 5 크기의 직사각형을 채우는 비대칭 타일링 방법 6가지를 보여줍니다. 다음의 2.. 더보기
[알고스팟/ALGOSPOT] 17. TILING2 고라파덕! 이번 문제는 TILING2라는 문제입니다. 이 문제는 동적계획법을 알아가는 문제 중 한 문제라 생각합니다. 마치 계단오르기 같이 점화식을 유추하기 쉬운 문제입니다. TILING2 문제 (출처 : https://algospot.com/judge/problem/read/TILING2) 문제 2xn 크기의 사각형을 2x1 크기의 사각형으로 빈틈없이 채우는 경우의 수를 구하는 프로그램을 작성하세요. 예를 들어 n=5라고 하면 다음 그림과 같이 여덟 가지의 방법이 있습니다. 경우의 수는 n이 커지면 아주 커질 수 있으므로, 1000000007으로 나눈 값을 대신 출력하세요. 입력 입력의 첫 줄에는 테스트 케이스의 수(C 더보기
[알고스팟/ALGOSPOT] 16. JLIS 알고라파덕~ 이번 문제는 LIS를 2개를 이용하여 푸는 JLIS라는 문제입니다! 이 문제 또한 동적계획법을 이용하여 해결을 하는데요~ 동적 계획법이란 처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한 답을 계산해 내는 방법입니다. 어떤 수열에서 0개 이상의 숫자를 지운 결과를 원 수열의 부분 수열이라고 부릅니다. 예를 들어 '4 7 6'은 '4 3 7 6 9'의 부분 수열입니다. 중복된 숫자가 없고 오름 차순으로 정렬되어 있는 부분 수열들을 가리켜 증가 부분 수열이라고 부르지요. 예를 들어 '3 6 9'는 앞의 수열의 증가 부분 수열입니다. 두 개의 정수 수열 A 와 B 에서 각각 증가 부분 수열을 얻은 뒤 이들을 크기 순서대로 합친 것을 합친 증가.. 더보기
14. TRIANGLEPATH 알고라파덕.14. TRIANGLEPATH 소스.#include void TRIANGLEPATH(); int main() { int testcase; scanf("%d", &testcase); while(testcase >= 1) { --testcase; TRIANGLEPATH(); } return 0; } void TRIANGLEPATH() { int data[105][105] = { 0}; int sum[105][105] = { 0 }; int N, i, j, max = 0; scanf("%d", &N); for(i=1; i 더보기
15. LIS 알고라파덕 LIS 소스.#include void LIS(); int cnt[510][510]; int main() { int testcase; scanf("%d", &testcase); while(testcase >= 1) { --testcase; LIS(); } return 0; } void LIS() { int num[510]; int N, M, i, j, max = 0; scanf("%d", &N); for(i=1; i 더보기
[알고스팟/ALGOSPOT] 15. LIS 안녕하세요~ 알고라파덕입니다~ 이번 문제는 동적 계획법 관련 문제입니다. 동적 계획법은 처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한 답을 계산해 내는 방법입니다. LIS 문제 어떤 정수 수열에서 0개 이상의 숫자를 지우면 이 수열의 부분 수열 (subsequence) 를 얻을 수 있다. 예를 들어 10 7 4 9 의 부분 수열에는 7 4 9, 10 4, 10 9 등이 있다. 단, 10 4 7 은 원래 수열의 순서와 다르므로 10 7 4 9 의 부분 수열이 아니다. 어떤 부분 수열이 순증가할 때 이 부분 수열을 증가 부분 수열 (increasing subsequence) 라고 한다. 주어진 수열의 증가 부분 수열 중 가장 긴 것의 길이를 계산하는.. 더보기
[알고스팟/ALGOSPOT] 14. TRIANGLEPATH 안녕하세요~ 알고라파덕입니다~ 이번 문제는 동적 계획법 관련 문제입니다. 동적 계획법은 처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한 답을 계산해 내는 방법입니다. TRIANGLEPATH 문제 6 1 2 3 7 4 9 4 1 7 2 7 5 9 4 위 형태와 같이 삼각형 모양으로 배치된 자연수들이 있습니다. 맨 위의 숫자에서 시작해, 한 번에 한 칸씩 아래로 내려가 맨 아래 줄로 내려가는 경로를 만들려고 합니다. 경로는 아래 줄로 내려갈 때마다 바로 아래 숫자, 혹은 오른쪽 아래 숫자로 내려갈 수 있습니다. 이 때 모든 경로 중 포함된 숫자의 최대 합을 찾는 프로그램을 작성하세요. 입력 입력의 첫 줄에는 테스트 케이스의 수 C(C 더보기
[알고스팟/ALGOSPOT] 10. PACKING 알고리즘 알고파! 알고라파덕 안녕하세요~ 알고라파덕입니다! 이번 10번 문제는 PACKING이라는 문제입니다.!! 이 문제는 동적계획법 대표 문제입니다. 가방 문제라고도 불리구요! 문제 개요 입력에서 테스트 케이스가 주어집니다. 테스트 케이스당 물건의 개수 N과 가방의 용량 W가 주어집니다 그리고 N개의 줄에 걸쳐 물건의 이름과 부피, 절박도(가치)가 주어집니다.N개의 물건을 용량내로 최대한의 가치, 절박도로 채워야 하는 것이 목표입니다. 최대 가치와, 물건 개수, 물건의 이름들을 출력해야 합니다. (경로 추적이 필요합니다~) 문제 풀이 최대 가치만 구하라 하면 동적계획법만을 사용하면 되지만, 물건의 개수와 이름을 구해야하기 때문에 추가적으로 재귀함수를 이용하여 경로를 추적합니다. 동적 계획법 부분 점화.. 더보기
[알고스팟/ALGOSPOT] 8. CONCERT 알고리즘 알고파! 알고라파덕 안녕하세요~ 알고라파덕입니다! 이번 문제는 동적계획법을 이용하여 해결하는 CONCERT라는 문제입니다. 문제 개요 먼저 입력에서 테스트 케이스가 주어지면 테스트 케이스 당 2줄씩 입력이 주어집니다. 첫 번째 줄에는 곡의 개수, 시작 볼륨, 최대 볼륨이 2번째 줄에는 곡의 개수만큼의 볼륨이 주어집니다. 여기서 각 볼륨을 키우든 줄이든 하여 볼륨이 0보다 작지 않고, VM보다 크지 않는 것들 중에서 가장 큰 값을 출력하라는 문제입니다. 문제 풀이 이 문제는 동적계획법을 어떻게 활용할까를 생각한다면 해법을 찾을 수 있다. 각 단계별로 볼륨을 만들 수 있는 것들을 모두 어떻게 저장을 할 것인가에 주목을 하여 생각을 해야 한다. 글씨가 읽기 힘드실텐데..ㅠㅠ 죄송합니당 먼저 입력을 받.. 더보기