๐ป C++ ์ ์ถ์ฝ๋
#include <stdio.h>
#include <algorithm>
using namespace std;
int main(){
int N;
scanf("%d", &N);
int A[N] = {};
int DP[N] = {};
for(int i=0; i<N; i++) scanf("%d", &A[i]);
for(int i=0; i<N; i++){
DP[i] = A[i];
for(int j=0; j<i; j++){
if(A[i] > A[j]) DP[i] = max(DP[i], DP[j]+A[i]);
}
}
printf("%d", *max_element(DP, DP+N));
}
๐ ๋ฌธ์ ํ์ด ๊ณผ์
- BOJ:11053 ๊ณผ ๋น์ทํ ๋ฌธ์ ์ธ๋ฐ, ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ์์์ ํฉ์์ ์ต๋๊ฐ์ ๊ตฌํด์ผ ํ๋ค.
- DP ๋ฐฐ์ด์์ ๊ฐ ์์์์์ ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด ์ต๋๊ฐ์ ์ ์ฅํ๋ค.
- 11053๋ฒ๊ณผ ๋์ผํ๊ฒ, i๋ฒ์งธ๋ณด๋ค ์์ ์ธ๋ฑ์ค๊น์ง์ ์์๋ค์ ๋น๊ตํด์ ๋ํด๊ฐ๋๋ฐ, DP[i]๋ A[i]๋ก ์ด๊ธฐ๊ฐ์ ์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ i๋ฒ์งธ ์ ๊น์ง์ DP[j] + A[i]์ ๋น๊ตํด์ ๋ ํฐ ๊ฒ์ DP[i]๋ก ์ค๋ค.
- ์์๊ฐ 10 90 20 80 100 ์ธ ๊ฒฝ์ฐ, max(DP[i], DP[j]+A[i])๋ฅผ ์ฒ๋ฆฌํด์ค์ผ ์์๊ฐ j == 1์ธ ๊ฒฝ์ฐ์์ 200๊ณผ ๋น๊ตํ์ ๋ j == 3์ธ ๊ฒฝ์ฐ์์ DP[4]์ธ ๊ฒฝ์ฐ๊ฐ 210์ผ๋ก ๋ ํฌ๋ฏ๋ก ์ด 210์ DP[4]๋ก ๊ฐ์ ธ๊ฐ๋ค.
๐ ๊ฒฐ๊ณผ