-
백준 11055 번: 가장 큰 증가 부분 수열다이나믹프로그래밍(DP) 2018. 8. 2. 10:16반응형
https://www.acmicpc.net/problem/11055
1. 문제
수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다.
2. 알고리즘
키워드 - 다이나믹 프로그래밍
가장 큰 증가 부분 수열중 가장 큰 값은 113 이다.
3. 코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <iostream>#include <sstream>#include <string>#include <algorithm>#include <functional>#include <vector>#include <list>#include <queue>#include <deque>#include <map>#include <set>#include <stack>#include <math.h>#include <memory.h>using namespace std;#define MAX_SIZE 100#define INF 0x7fffffff#define CENDL "\n"#define ll long longint main() {cin.tie(0);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, 0);int sol = 0;for (int i = 0; i < n; ++i) {int cand = 0;for (int j = 0; j < i; ++j) {if (arr[i] > arr[j]) {if (cand < dp[j]) {cand = dp[j];}}}dp[i] = cand + arr[i];if (sol < dp[i]) {sol = dp[i];}}cout << sol << "\n";return 0;}cs 반응형'다이나믹프로그래밍(DP)' 카테고리의 다른 글
백준 1463번: 1로 만들기 (0) 2018.08.09 백준 1309번: 동물원 (0) 2018.08.04 백준 1912번: 연속합 (0) 2018.07.03 백준 10986번: 나머지 합 (0) 2018.07.01 백준 1904번: 01타일 (0) 2018.06.24