ACM-ICPC  세미나 분할정복
분할정복 한 사람이 최대  1 만큼 일을 할 수 있다고 할 때 ,  어떤 사람에게  64 만큼의 일이 있다면 이 일을 둘로 쪼개  32 씩 외주로 맡기면 된다 . 외주로 일을 받은 사람은 또  16 씩 쪼개서 외주로 맡긴다 . 최초의 한 사람 입장에서 봤을 때 이 일은 단순히 외주를 두번 맡겨서 끝난 일이다 .
분할정복 (cont) 합병정렬 (merge sort) 가 대표적인 분할정복의 예 합병정렬은 다음의 절차로 이루어진다 . 절반씩 나눠 각각을 정렬한 다음 전체를 정렬 이진트리 혹은  n 진트리로 상태가 완전히 독립될 수 있는 문제를 분할정복으로 풀 수 있다 .
ACM-ICPC  세미나 동적계획법
동적계획법 분할정복과 달리 문제가 서로 독립되게 나눠지지 않는 경우 사용 이미 계산된 부분 문제를 이용하여 다른 부분 문제를 완성 백트랙킹 처럼 지수로 증가하거나 분할정복처럼 로그로 증가하는 것이 아니라 변수의 개수에 따라 차수만 증가 테이블로 표현
동적계획법 테이블의 차수에 따라  1 차원 동적계획법 , 2 차원 동적계획법 , 3 차원 동적계획법 등으로 부름 테이블의 차수는 곧 배열의 차수가 됨 동적계획법을 발음하기 좋게 다이나믹이라고 부르기도 함
1 차원 다이나믹 최대 증가 부분 수열 문제 어떤 불규칙한 수열이 있을 때 가장 긴 증가 부분 수열을 뽑아내는 문제 즉 , 5 3 1 2 4 2  라는 수열이 있으면  1 2 4 가 답이 된다 . a[n]=max(a[i]+1) ( i :1~n-1, d[i] < d[n] ) 위와 같은 식을 점화식이라고 함
2 차원 다이나믹 최대 공통 문자열 문제 (LCS) 길이  i, j  인 두 문자열이 있을 때 ,  첫 번째 문자열의  i 번째 문자와 두 번째 문자열의  j 번째 문자가 같다면 길이가 각각  i-1, j-1  일 때 공통 문자열 길이  + 1 이 된다 . a[i,j] = a[i-1,j-1]+1 ( if s1[i] == s2[j] ) a[i,j] = max(a[i-1,j], a[i,j-1]) ( if s1[i] != s2[j] )
ACM-ICPC  세미나 연습 문제
연습문제 UVA111 UVA103 UVA10450

Acmicpcseminar5

  • 1.
    ACM-ICPC 세미나분할정복
  • 2.
    분할정복 한 사람이최대 1 만큼 일을 할 수 있다고 할 때 , 어떤 사람에게 64 만큼의 일이 있다면 이 일을 둘로 쪼개 32 씩 외주로 맡기면 된다 . 외주로 일을 받은 사람은 또 16 씩 쪼개서 외주로 맡긴다 . 최초의 한 사람 입장에서 봤을 때 이 일은 단순히 외주를 두번 맡겨서 끝난 일이다 .
  • 3.
    분할정복 (cont) 합병정렬(merge sort) 가 대표적인 분할정복의 예 합병정렬은 다음의 절차로 이루어진다 . 절반씩 나눠 각각을 정렬한 다음 전체를 정렬 이진트리 혹은 n 진트리로 상태가 완전히 독립될 수 있는 문제를 분할정복으로 풀 수 있다 .
  • 4.
    ACM-ICPC 세미나동적계획법
  • 5.
    동적계획법 분할정복과 달리문제가 서로 독립되게 나눠지지 않는 경우 사용 이미 계산된 부분 문제를 이용하여 다른 부분 문제를 완성 백트랙킹 처럼 지수로 증가하거나 분할정복처럼 로그로 증가하는 것이 아니라 변수의 개수에 따라 차수만 증가 테이블로 표현
  • 6.
    동적계획법 테이블의 차수에따라 1 차원 동적계획법 , 2 차원 동적계획법 , 3 차원 동적계획법 등으로 부름 테이블의 차수는 곧 배열의 차수가 됨 동적계획법을 발음하기 좋게 다이나믹이라고 부르기도 함
  • 7.
    1 차원 다이나믹최대 증가 부분 수열 문제 어떤 불규칙한 수열이 있을 때 가장 긴 증가 부분 수열을 뽑아내는 문제 즉 , 5 3 1 2 4 2 라는 수열이 있으면 1 2 4 가 답이 된다 . a[n]=max(a[i]+1) ( i :1~n-1, d[i] < d[n] ) 위와 같은 식을 점화식이라고 함
  • 8.
    2 차원 다이나믹최대 공통 문자열 문제 (LCS) 길이 i, j 인 두 문자열이 있을 때 , 첫 번째 문자열의 i 번째 문자와 두 번째 문자열의 j 번째 문자가 같다면 길이가 각각 i-1, j-1 일 때 공통 문자열 길이 + 1 이 된다 . a[i,j] = a[i-1,j-1]+1 ( if s1[i] == s2[j] ) a[i,j] = max(a[i-1,j], a[i,j-1]) ( if s1[i] != s2[j] )
  • 9.
    ACM-ICPC 세미나연습 문제
  • 10.