문제 링크
https://www.acmicpc.net/problem/11053
11053번: 가장 긴 증가하는 부분 수열
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
www.acmicpc.net
내가 작성한 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(void) {
int N;
int min = 0;
int max = 0;
int arr[1001] = { 0 };
int dp[1001] = { 0 };
cin >> N;
for (int i = 1; i <= N; i++) {
cin >> arr[i];
}
for (int i = 1; i <= N; i++) {
min = 0;
for (int j = 1; j <= i; j++) {
if (arr[i] > arr[j]&&dp[j]>min) {
min = dp[j];
}
}
dp[i] = min + 1;
if (max < dp[i]) {
max = dp[i];
}
}
cout << max << '\n';
}
|
cs |
- 문제 이해에 도움을 받은 블로그 링크 : https://wootool.tistory.com/96
[백준][11053번][DP] 가장 긴 증가 부분 수열
가장 긴 증가 부분 수열 https://www.acmicpc.net/problem/11053 <코드> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include int main(void){ int N; int Dp[10..
wootool.tistory.com
- i번째 숫자까지의 증가 부분 수열 개수를 기록하며 조사하고 가장 많은 수열의 개수를 출력한다.
- 중간에 매우 큰 값이 나올 수 있으므로 조건문에 dp의 값도 비교하면서 최대한으로 나올 수 있는 경우의 수를 구한다.
코드 채점 결과
'BAEKJOON' 카테고리의 다른 글
[BaekJoon]11722번 - 가장 긴 감소하는 부분 수열(DP) (0) | 2019.08.06 |
---|---|
[BaekJoon]11055번 - 가장 큰 증가 부분 수열(DP) (0) | 2019.08.06 |
[BaekJoon]9012번 - 괄호 (0) | 2019.08.03 |
[BaekJoon]10828번 - 스택 (0) | 2019.08.03 |
[BaekJoon]11004번 - K번째 수(정렬) (0) | 2019.08.02 |