개발/백준
[백준] 11055번. 가장 큰 증가하는 부분 수열 (C++)
yun000
2024. 11. 24. 17:35
문제
https://www.acmicpc.net/problem/11055
풀이
[DP, LIS알고리즘]
저번에 푼문제랑 비슷해서 후딱풀었다
숫자들을 차례대로 확인한다
지금 확인할 숫자가 n번째 숫자라고 하자
0~n-1번째 숫자들 중 n번째 숫자보다 작은 숫자를 m이라고 하자
"dp[m]+n번째 숫자"가 "dp[n]"보다 크면 dp를 갱신한다.
dp중에 제일 큰 값이 정답!
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int N; cin >> N;
int maxN=0;
vector<int>number(N);
vector<int>dp(N);
for (int i = 0; i < N; i++)
{
cin >> number[i];
dp[i] = number[i];
for (int j = 0; j < i; j++)
{
if(number[i]>number[j])
{
dp[i] = max(dp[j] + number[i], dp[i]);
}
if (dp[i] > maxN) { maxN = dp[i]; }
}
}
cout << *max_element(dp.begin(), dp.end());
}
유사한 문제
https://yun000.tistory.com/163
[백준] 11722번. 가장 긴 감소하는 부분 수열 (C++)
문제https://www.acmicpc.net/problem/11722풀이[DP, LIS 알고리즘]숫자를 차례대로 확인한다.이번에 확인하는 숫자 n의 이전 값들 중에n보다 크고, dp값도 큰 m이 있다고 하면m의 dp값+1 로 n의 dp값을 갱신한다.
yun000.tistory.com