dp ๋ฐฐ์ด์ ์์ฑํ๊ณ dp[i]์๋ i ๋ฒ์งธ ์์๊ฐ ํ์ฑํ๊ณ ์๋ ๋ถ๋ถ ์์ด์ ํฉ์ ๋ฃ์ ๊ฒ์ด๋ค.
์ฆ, dp[i] ๋ ์์ด์ i๋ฒ์งธ ์์๊น์ง ๊ฐ์ฅ ํฐ ๋ถ๋ถ์์ด์ ํฉ์ ๊ธฐ๋กํ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด A = [1 2 3 10 5 14] ๊ฐ ์๋ค๊ณ ํ ๋
dp = [1 3(1+2) 6(1+2+3) 16(1+2+3+10) 11(1+2+3+5) 30(1+2+3+10+14)]
= [1 3 6 11 16 30]
์ด ๋๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ค์ ์ ์ผ๋ก ๋ด์ผํ ํฌ์ธํธ๋, dp[5]๋ฅผ ๊ตฌํ ๋์ด๋ค.
๋ถ๋ถ ์์ด์ ๊ฒฝ์ฐ์ ์๊ฐ 2๊ฐ์ง ์กด์ฌํ๋ค.
[1 2 3 5 14 ] ์ฆ, ์ดํฉ์ด 25๊ฐ ๋๋ ๊ฒฝ์ฐ์
[1 2 3 10 14] ์ฆ, ์ดํฉ์ด 30์ด ๋๋ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค.
์ฑ์ฐ๋ ๋ฐฉ๋ฒ์, 30๋ณด๋ค ์์ ์์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, ๊ทธ ์์๊ฐ ๊ฐ๊ณ ์๋ dp๊ฐ์ ์๊ธฐ ์์ (30)์ ๋ํ ๊ฐ์ด
30๊น์ง์ ๋ถ๋ถ์์ด์ ํฉ์ด ๋๋ค.
30๋ณด๋ค ์์์์๊ฐ ๊ฐ๊ณ ์๋ dp๊ฐ์ ์๊ธฐ์์ (30)์ ๋ํ ๊ฐ์ด ์ด๋ฏธ ๊ธฐ๋ก๋ ๋ถ๋ถ์์ด์ ํฉ๋ณด๋ค ์์ ๊ฒฝ์ฐ๋ ์ ๋ฐ์ดํธ ํ์ง ์์ผ๋ฉด ๋๋ค.
dp[5] ์ ์ฑ์์ผ ํ๋ ์ํฉ์ด๋ผ๊ณ ์๊ฐํด๋ณด์
dp[4] ๊น์ง๋ ์ด๋ฏธ ํด๋น ์์๊ฐ ์ด๋ฃจ๊ณ ์๋ ๋ถ๋ถ์์ด ์ค ๊ฐ์ฅ ํฐ ์ดํฉ์ด ๊ธฐ๋ก๋์ด ์๋ค.
Array[0] = 1 < Array[5] = 14 ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
๋ํ, dp[5] = 0 < dp[0] + Array[5] = 1+14 ๋ง์กฑํ๋ฏ๋ก, dp[5]= dp[0] +Array[5] = 15 ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
Array[1] = 2 < Array[5] = 14 ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
๋ํ, dp[5] = 15 < dp[1] + Array[5] = 3+14 =17 ๋ง์กฑํ๋ฏ๋ก, dp[5]= dp[1] +Array[5] = 17 ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
Array[2] = 3 < Array[5] = 14 ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
๋ํ, dp[5] = 17 < dp[2]+ Array[5] = 6+14 =20 ๋ง์กฑํ๋ฏ๋ก, dp[5]= dp[2] +Array[5] = 20 ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
Array[3] = 10 < Array[5] = 14 ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
๋ํ, dp[5] = 20 < dp[3] + Array[5] = 16+14 =30 ๋ง์กฑํ๋ฏ๋ก, dp[5]= dp[1] +Array[5] = 30 ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
Array[4] = 5 < Array[5] = 14 ๋ง์กฑํ๋ค.
ํ์ง๋ง, dp[5] = 30 > dp[4] + Array[5] = 11+14 =25 ์กฐ๊ฑด์ ๋ถ๋ง์กฑํ๋ฏ๋ก, ์ ๋ฐ์ดํธํ์ง ์๊ณ dp[5] = 30์ผ๋ก ์ ์งํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ฅ ํฐ ๋ถ๋ถ์์ด์ด ๊ธฐ๋ก๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
int[] dp = new int[N + 1];
int[] array = new int[N + 1];
String[] input = br.readLine().split(" "); // ์์ด์ split์ ์ด์ฉํ์ฌ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋๋ String ๋ฐฐ์ด๋ก ์
๋ ฅ ๋ฐ๋๋ค.
for (int i = 1; i <= N; i++) {
array[i] = Integer.valueOf(input[i - 1]); //์
๋ ฅ๋ฐ์ ์์ด์ด String์ด๊ธฐ ๋๋ฌธ์, int๋ก ๋ฐ๊พผ ํ array ๋ฐฐ์ด์ ์ฑ์ด๋ค.
dp[i]=array[i];
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j < i; j++) {
if (array[i] > array[j] && dp[j] + array[i] > dp[i]) {
//1 ~ i-1 ๋ฒ์งธ ์์๋ค ์ค i๋ณด๋ค ์์ ๊ฒฝ์ฐ ๊ทธ๋ฆฌ๊ณ ํ์ฌ dp[i] ๋ณด๋ค dp[j]+array[i]๊ฐ ํฐ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ
dp[i] = dp[j] + array[i];
}
}
}
System.out.println(Arrays.toString(dp));
Arrays.sort(dp); //dp๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค
System.out.println(Arrays.toString(dp));
System.out.println(dp[N]); // ์ ์ผ ๋ค์์๋ ๊ฐ์ด ์ต๋๊ฐ์ผ ๊ฒ
}
}