본문 바로가기

분류 전체보기45

[백준 11053] 가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 해설 이번 문제는 흔히 LIS 라고 불리는 가장 긴 증가하는 부분 수열 문제이다. 예제인 10, 20, 10, 30, 20, 50으로 풀이를 해보겠다. 일단, 여기서의 답은 10,20,30,50 으로 4이다. 10 20 10 30 20 50 1번 1 2 " 1 2 3 " 1 2 1 4 " 1 2 1 3 5 " 1 2 1 3 2 6 " 1 2 1 3 2 4 이것만 보면 이해가 되겠는 가? 이제 천천히 설명해보겠다. 1번은 첫번째인 10까지의 부분 수열이 얼마나 나오는 지 구하는 건데, 1번은 10만 비교하니 1이다. 2번은 20까지 부분 수열을 구해보는 건데, 10, 20 총 2이다. 3번은 10까지 부분 수열을 구하는 건데, 10 총 1.. 2020. 3. 30.
[백준 12865] 평범한 배낭 https://www.acmicpc.net/problem/12865 해설 이번 문제는 일정한 무게와 가치가 주어질 때, 가치의 합이 최대가 되면서 짐을 고르게 하는 전형적인 냅색 문제이다. max(dp[i-1][j], dp[i-1][j - w[i]] + v[i]) 냅색 점화식 소스코드 #include #include using namespace std; int dp[101][100001]; int w[101]; int v[101]; int main() { int n, k; cin >> n >> k; for (int i = 1; i > w[i] >> v[i]; for (int i = 1; i 2020. 3. 30.
[백준 9252] LCS 2 https://www.acmicpc.net/problem/9252 해설 LCS DP 문제이며, 또 그 이후에 역추적을 사용 해 어떤 문자가 공통 문자열인지 구하는 문제입니다. 0 A C A Y K P 0 0 0 0 0 0 0 0 C 0😊 0 1 1 1 1 1 A 0 1😊 1 2 2 2 2 P 0 1😊 1 2 2 2 3 C 0 1 2😊 2 2 2 3 A 0 1 2 3😊 3 3 3 K 0 1 2 3 3 4😊 4 공통 문자 수 구하는 건 (https://far-simple.tistory.com/37) 여기서 했으니, 저는 역추적을 설명해보겠습니다. 일단, 😊 이거 적힌 순서대로 for문을 검색해주면 됩니다. 가장 오른쪽 가장 아래에서 부터 시작해서 왼쪽으로 이동합니다. 왼쪽으로 이동하면서 자기보다 왼쪽에 있는.. 2020. 3. 30.
[백준 9251] LCS https://www.acmicpc.net/problem/9251 해설 이번 문제도 다이나믹 프로그래밍이다. LCS 문제를 통해 또 한번 DP의 넓은 세계에 감탄한다. LCS라는 문제로 Longest Common Subsequence 최장 공통 부분 수열의 길이를 구하는 문제이다. 지금부터 해설을 시작해보겠다. 예제에 맞게 ACAYKP CAPCAK 이 두 문자를 가지고 비교를 해보겠다. 먼저, 표를 그려주었다. ( 편의를 위해 0번 배열을 만들고, 0으로 초기화해놨다. ) 0 C A P C A K 0 0 0 0 0 0 0 0 A C A Y K P A부터 진행해보겠다. 0 A C A Y K P 0 0 0 0 0 0 0 0 C 0 0 1 1 1 1 1 A P C A K 이것만 보고 저 위에 있는 1의 의미를.. 2020. 3. 28.