11722๋ฒ: ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์๋ฅผ ๋ค์ด, ์์ด A = {10, 30, 10, 20, 20, 10} ์ธ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด์ A = {10, 30, 10, 20, 20, 10}
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include<iostream>
#include <string>
#include<algorithm>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int dp[1001];
int seq[1001];
int N,max_dp=0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> seq[i];
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (seq[j] > seq[i]&& dp[j] + 1 > dp[i]&&max_dp<dp[j]) {
max_dp = dp[j];
}
}
dp[i] += max_dp;
max_dp = 0;
}
for (int i = 0; i < N; i++) {
if (dp[i] > max_dp) {
max_dp = dp[i];
}
}
cout << max_dp;
return 0;
}
๐ ๋ฌธ์ ํ์ด
๋ฐฐ์ด dp[] ๋ ์์ด์ ๊ธธ์ด๋ฅผ ์๋ฏธํ๋ค
dp[i] ๋ seq[i]๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ์ฅ ๊ธด ์์ด์ ๊ธธ์ด๋ฅผ ์๋ฏธ

→ 10์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์์ ๋, ๊ทธ ์ด์ ๊ฐ์ด ์์ผ๋ฏ๋ก dp๊ฐ์ 1๋ก ์ง์ ํด์ค๋ค
→ 30์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์์ ๋, ๊ทธ ์ด์ ๊ฐ๋ค ์ค์ 30๋ณด๋ค ํฐ ๊ฐ์ ์์ผ๋ฏ๋ก
์์ด์ ๊ธธ์ด๋ 1์ด ๋๋ค
→ 10์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์์ ๋, ์ด์ ๊ฐ๋ค ์ค์ 10๋ณด๋ค ํฐ 30์ด๋ผ๋ ๊ฐ์ด ์กด์ฌํ๋ค
30์ ์์ด์ ๊ธธ์ด ๊ฐ์ ๋ํด์ฃผ์ด, ์์ด์ ๊ธธ์ด๊ฐ 2๊ฐ ๋๋ค
→ 20์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์์ ๋, ์ด์ ๊ฐ๋ค ์ค์ 20๋ณด๋ค ํฐ ๊ฐ์ 30๋ฐ์ ์กด์ฌํ์ง ์๋๋ค
30์ ์์ด์ ๊ธธ์ด ๊ฐ์ ๋ํด์ฃผ์ด, ์์ด์ ๊ธธ์ด๊ฐ 2๊ฐ ๋๋ค
→ 10์ด๋ผ๋ ๊ฐ์ด ๋ค์ด์์ ๋, ์ด์ ๊ฐ๋ค์ค์ 10๋ณด๋ค ํฐ ๊ฐ์ 30๊ณผ 20 ๋ ๊ฐ๊ฐ ์กด์ฌํ๋ค
๊ทธ๋ฌ๋ 20์ ์์ด์ ๊ธธ์ด(dp) ๊ฐ์ด 30์ ์์ด์ ๊ธธ์ด ๊ฐ๋ณด๋ค ํฌ๊ธฐ๋๋ฌธ์, 20์ ์์ด์ ๊ธธ์ด ๊ฐ์ ๋ํด์ฃผ์ด ์์ด์ ๊ธธ์ด๊ฐ 3์ด ๋๋ค
โญ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ
