-
백준 11053번: 가장 긴 증가하는 부분 수열다이나믹프로그래밍(DP) 2020. 11. 26. 18:30반응형
https://www.acmicpc.net/problem/11053
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.
예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
히스토리
2020-03-22 수정증가하는수열만 count 하는 설명으로 변경
키워드 - 다이나믹 프로그래밍
Source
#include <iostream> #include <algorithm> // min #include <functional> #include <math.h> #include <string> #include <string.h> #include <vector> #include <map> #include <sstream> using namespace std; int main() { std::ios::sync_with_stdio(false); int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } int dp[1001]; std::fill_n(dp, 1001, 1); int sol = 1; for (int i = 0; i < n; ++i) { int code = arr[i]; for (int j = 0; j < i; ++j) { int value = arr[j]; if (code > value) { dp[i] = max(dp[i], dp[j] + 1); } } sol = max(sol, dp[i]); } cout << sol << "\n"; return 0; }
반응형'다이나믹프로그래밍(DP)' 카테고리의 다른 글
백준 2293번: 동전 1 (3) 2020.11.27 백준 12847번: 꿀 아르바이트 (0) 2020.11.27 백준 1932번: 정수 삼각형 (0) 2020.11.26 백준 2916번: 자와 각도기 (0) 2018.10.21 백준 14501번 : 퇴사 (0) 2018.08.12