안녕 세상아,

[c++/백준] 11722 가장 긴 감소하는 부분 수열 본문

백준

[c++/백준] 11722 가장 긴 감소하는 부분 수열

돈 많은 백수가 되고싶다 2023. 8. 30. 12:50

https://www.acmicpc.net/problem/11722

 

11722번: 가장 긴 감소하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net

11053번 문제랑 같은 문제라고 생각하면 된다. 

dp를 이용해서 문제를 해결하였다.

#include <iostream>
#include <algorithm>
using namespace std;

int arr[1001];
int dp[1001];

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;

	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	int ans = 0;
	for (int i = 0; i < n; i++) {
		dp[i] = 1;
		for (int j = 0; j < i; j++) {
			//현재 값 이전 값을 돌면서 현재값보다 크면 +1해준 값으로 dp에 저장
			if (arr[i] < arr[j]) {
				dp[i] = max(dp[i], dp[j] + 1);
			}
		}
		//가장 긴 수열 갱신하면서 ans값에 저장해주기
		ans = max(ans, dp[i]);
	}
	cout << ans;
}

'백준' 카테고리의 다른 글

[백준/c++] 4963 섬의 개수  (0) 2024.11.16
[백준/c++] 2178 미로 탐색  (1) 2024.11.16
[c++/백준] 11652 카드  (0) 2023.08.28
[c++/백준] 9659 돌 게임 5  (0) 2023.08.18
[c++/백준] 21921 블로그  (0) 2023.08.09