본문 바로가기

DP3

[BOJ] 1699. 제곱수의 합 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 풀이방법 : DP + 약간의 생각 ​ 1트 : 실패 Why? TLE 1. DP[n] = k, n을 만드는데 필요한 최소 숫자의 개수 라고 table 정의 ​ DP[1] = 1 DP[2] =2 // 1 + 1 DP[3] = 3 // 1 + 1 + 1 DP[4] = 1 // 2^2 ​ 이런식으로 해서 DP[10]을 구할땐, DP[1]+DP[9], DP[2]+DP.. 2021. 10. 28.
[BOJ] 12738, 14003 LIS(가장 긴 증가하는 수열, 이분탐색) - 2 https://www.acmicpc.net/problem/12738 12738번: 가장 긴 증가하는 부분 수열 3 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (-1,000,000,000 ≤ Ai ≤ 1,000,000,000) www.acmicpc.net n이 100만이므로 O(nlogn)의 풀이를 택해야 합니다. 이번엔 이분탐색을 이용해서 풀어보도록 하겠습니다. 참고로 이분탐색은 빠르게 개수는 찾을 수 있지만, LIS가 항상 올바른 순서로 있다고 장담할 순 없습니다. lower_bound함수를 이용하면 t보다 같거나, 큰 가장 최소의 인덱스를 반환해줍니다. 예를들면 arr[3] = {1,5,6} 일때 lower_bo.. 2021. 9. 25.
[BOJ] 11053, 11722, 14002 LIS(가장 긴 증가하는 수열, 가장 긴 감소하는 수열) - 1 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 저는 바로 못풀었습니다. DP로 어떻게 풀지? 이렇게 생각했어요. 위키피디아에서 LIS를 검색해서 시뮬레이션을 보고 이분탐색으로 했습니다. 전 아이언5티어입니다.. ​ 풀이 방법 : 2가지가 있습니다. LIS 시리즈가 1~5까지 있는만큼, 더 좋은방법이 존재합니다. 이번 포스팅에서는 DP를 이용한 풀이, 다음 포스팅에서.. 2021. 9. 25.
728x90