문제
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
'개발 > 백준' 카테고리의 다른 글
[백준] 1965번. 상자넣기 (C++) (0) | 2024.11.26 |
---|---|
[백준] 11657번. 타임머신 (C++) (0) | 2024.11.25 |
[백준] 11722번. 가장 긴 감소하는 부분 수열 (C++) (0) | 2024.11.23 |
[백준] 2116번. 주사위 쌓기 (C++) (1) | 2024.11.21 |
[백준] 2437번. 저울 (C++) (0) | 2024.11.20 |