๋ฌธ์
์๊ทผ์ด์ ์ฌ๋์ ์๋ฅ์ด๋ ๋ฌธ๋ฐฉ๊ตฌ์์ ์คํฐ์ปค 2n๊ฐ๋ฅผ ๊ตฌ๋งคํ๋ค. ์คํฐ์ปค๋ ๊ทธ๋ฆผ (a)์ ๊ฐ์ด 2ํ n์ด๋ก ๋ฐฐ์น๋์ด ์๋ค. ์๋ฅ์ด๋ ์คํฐ์ปค๋ฅผ ์ด์ฉํด ์ฑ ์์ ๊พธ๋ฏธ๋ ค๊ณ ํ๋ค.
์๋ฅ์ด๊ฐ ๊ตฌ๋งคํ ์คํฐ์ปค์ ํ์ง์ ๋งค์ฐ ์ข์ง ์๋ค. ์คํฐ์ปค ํ ์ฅ์ ๋ผ๋ฉด, ๊ทธ ์คํฐ์ปค์ ๋ณ์ ๊ณต์ ํ๋ ์คํฐ์ปค๋ ๋ชจ๋ ์ฐข์ด์ ธ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์ฆ, ๋ ์คํฐ์ปค์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ์๋์ ์๋ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ชจ๋ ์คํฐ์ปค๋ฅผ ๋ถ์ผ ์ ์๊ฒ๋ ์๋ฅ์ด๋ ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ธฐ๊ณ , ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๊ฒ ์คํฐ์ปค๋ฅผ ๋ผ์ด๋ด๋ ค๊ณ ํ๋ค. ๋จผ์ , ๊ทธ๋ฆผ (b)์ ๊ฐ์ด ๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ฒผ๋ค. ์๋ฅ์ด๊ฐ ๋ ์ ์๋ ์คํฐ์ปค์ ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์ฆ, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๋ฉด์ ์๋ก ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์งํฉ์ ๊ตฌํด์ผ ํ๋ค.
์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์ ์ ์๊ฐ 50, 50, 100, 60์ธ ์คํฐ์ปค๋ฅผ ๊ณ ๋ฅด๋ฉด, ์ ์๋ 260์ด ๋๊ณ ์ด ๊ฒ์ด ์ต๋ ์ ์์ด๋ค. ๊ฐ์ฅ ๋์ ์ ์๋ฅผ ๊ฐ์ง๋ ๋ ์คํฐ์ปค (100๊ณผ 70)์ ๋ณ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์, ๋์์ ๋ ์ ์๋ค.
## ์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ n (1 โค n โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ๋ ์ค์๋ n๊ฐ์ ์ ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ ์๋ ๊ทธ ์์น์ ํด๋นํ๋ ์คํฐ์ปค์ ์ ์์ด๋ค. ์ฐ์ํ๋ ๋ ์ ์ ์ฌ์ด์๋ ๋น ์นธ์ด ํ๋ ์๋ค. ์ ์๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
## ์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค ๋ง๋ค, 2n๊ฐ์ ์คํฐ์ปค ์ค์์ ๋ ๋ณ์ ๊ณต์ ํ์ง ์๋ ์คํฐ์ปค ์ ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 256 MB | 67707 | 31720 | 22316 | 46.730% |
https://www.acmicpc.net/problem/9465
ํ์ด
์๊ณ ๋ฆฌ์ฆ ํ๋ฆ
์๊ณ ๋ฆฌ์ฆ์ ์ดํด๋ณด๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
๋ฐฐ์ด์ ์์น๋ง๋ค ๊ฐ์ ์ง์ ํ๋ arr[][]
๋ฐฐ์ด๊ณผ, ์ด์ ๊ฐ๊ณผ ํฉํด์ ์ต๋๊ฐ์ ๋ง๋ค๊ธฐ์ํ dp[][]
๊ฐ ์ ์ธ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋์ ์คํฐ์ปค๋ฅผ ๋๊ฒฝ์ฐ 2๊ฐ์ง์ ๊ฒฝ์ฐ์ ์๊ฐ ์๊ธด๋ค.
- ํ์ฌ ์ ํํ ๊ฐ์ ๋๊ฐ์
- ํ์ฌ ์ ํํ ๊ฐ์ ๋๊ฐ์ ๋ค์๋ฒ
์ด๋ ๊ถ๊ธํ์ ์ด ์๊ธด๋ค. ๊ทธ๋ผ ์ฒ์ ํ๋์ 50๋ถํฐ ๋ดค์๋ ๋ค์์ผ๋ก 50, 70์ด ์๋, 10์ด๋ 100์ ๋ชป์ค๋๊ฑด๊ฐ? ํ๋ ๊ฒ์ด๋ค. 10์ ๊ฒฝ์ฐ ํ๋์ 50๊ณผ ๋ฟ์์๋ ๋ฉด์ด๋ผ ๋ถ๊ฐ๋ฅํ๊ณ , 100์ ๊ฒฝ์ฐ ๊ฐ๋ฅํ์ง๋ง, ์๊ฐํด๋ณด๋ฉด ์ด๋ฌธ์ ๋ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์ฆ, 50 - x - 100 ๊ณผ 50 - 50 - 100 ์ ๊ฒฝ์ฐ์์ ๋น์ฐํ ํ์๊ฐ ๋ ํฐ๊ฐ์ ๊ฐ์ง์์๊ฒ ๋๋ค.
๊ทธ๋ผ ๋ฌธ์ ๋ฅผ ์ ํ์์ผ๋ก ๋ํ๋ด ๋ณด์. ```java dp[0][i] = Math.max(dp[1][i-1], dp[1][i-2]) + cost[0][i]; dp[1][i] = Math.max(dp[0][i-1], dp[0][i-2]) + cost[1][i]; ```
์ด๋ ๊ฒ ๋ ๊ฒ์ด๋ค.
์ฝ๋
```java
import java.util.Scanner;
public class ์คํฐ์ปค {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt(); //ํ
์คํธ ์ผ์ด์ค
for(int k=0; k<t; k++){
int n = sc.nextInt(); //2xn๊ฐ ์ ์คํฐ์ปค
int[][] arr = new int[2][n];
int[][] dp = new int[2][n];
for(int i=0; i<2; i++){
for(int j=0; j<n; j++){
arr[i][j] = sc.nextInt(); //arr ํ ๋น
}
}
dp[0][0] = arr[0][0]; //์ด๊ธฐ๊ฐ ํ ๋น
dp[1][0] = arr[1][0]; //์ด๊ธฐ๊ฐ ํ ๋น
dp[0][1] = arr[1][0] + arr[0][1];
dp[1][1] = arr[0][0] + arr[1][1];
for(int i=2; i<n; i++){
dp[0][i] = Math.max(dp[1][i-1], dp[1][i-2]) + arr[0][i];
dp[1][i] = Math.max(dp[0][i-1], dp[0][i-2]) + arr[1][i];
}
System.out.println(Math.max(dp[0][n-1], dp[1][n-1]));
sc.close();
}
}
}```