λ¬Έμ
ν¨μ£Όλ ν¬λμ£Ό μμνμ κ°λ€. κ·Έ κ³³μ κ°λλ, ν μ΄λΈ μμ λ€μν ν¬λμ£Όκ° λ€μ΄μλ ν¬λμ£Ό μμ΄ μΌλ ¬λ‘ λμ¬ μμλ€. ν¨μ£Όλ ν¬λμ£Ό μμμ νλ €κ³ νλλ°, μ¬κΈ°μλ λ€μκ³Ό κ°μ λ κ°μ§ κ·μΉμ΄ μλ€.
- ν¬λμ£Ό μμ μ ννλ©΄ κ·Έ μμ λ€μ΄μλ ν¬λμ£Όλ λͺ¨λ λ§μ μΌ νκ³ , λ§μ νμλ μλ μμΉμ λ€μ λμμΌ νλ€.
- μ°μμΌλ‘ λμ¬ μλ 3μμ λͺ¨λ λ§μ€ μλ μλ€.
ν¨μ£Όλ λ μ μλ λλ‘ λ§μ μμ ν¬λμ£Όλ₯Ό λ§λ³΄κΈ° μν΄μ μ΄λ€ ν¬λμ£Ό μμ μ νν΄μΌ ν μ§ κ³ λ―Όνκ³ μλ€. 1λΆν° nκΉμ§μ λ²νΈκ° λΆμ΄ μλ nκ°μ ν¬λμ£Ό μμ΄ μμλλ‘ ν μ΄λΈ μμ λμ¬ μκ³ , κ° ν¬λμ£Ό μμ λ€μ΄μλ ν¬λμ£Όμ μμ΄ μ£Όμ΄μ‘μ λ, ν¨μ£Όλ₯Ό λμ κ°μ₯ λ§μ μμ ν¬λμ£Όλ₯Ό λ§μ€ μ μλλ‘ νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄ 6κ°μ ν¬λμ£Ό μμ΄ μκ³ , κ°κ°μ μμ μμλλ‘ 6, 10, 13, 9, 8, 1 λ§νΌμ ν¬λμ£Όκ° λ€μ΄ μμ λ, 첫 λ²μ§Έ, λ λ²μ§Έ, λ€ λ²μ§Έ, λ€μ― λ²μ§Έ ν¬λμ£Ό μμ μ ννλ©΄ μ΄ ν¬λμ£Ό μμ΄ 33μΌλ‘ μ΅λλ‘ λ§μ€ μ μλ€.
## μ λ ₯
첫째 μ€μ ν¬λμ£Ό μμ κ°μ nμ΄ μ£Όμ΄μ§λ€. (1 ≤ n ≤ 10,000) λμ§Έ μ€λΆν° n+1λ²μ§Έ μ€κΉμ§ ν¬λμ£Ό μμ λ€μ΄μλ ν¬λμ£Όμ μμ΄ μμλλ‘ μ£Όμ΄μ§λ€. ν¬λμ£Όμ μμ 1,000 μ΄νμ μμ΄ μλ μ μμ΄λ€.
## μΆλ ₯
첫째 μ€μ μ΅λλ‘ λ§μ€ μ μλ ν¬λμ£Όμ μμ μΆλ ₯νλ€.
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ μΆ | μ λ΅ | λ§ν μ¬λ | μ λ΅ λΉμ¨ |
---|---|---|---|---|---|
2 μ΄ | 128 MB | 133020 | 45346 | 32776 | 32.622% |
https://www.acmicpc.net/problem/2156
νμ΄
μκ³ λ¦¬μ¦ νλ¦
μ€μνκ² λ΄μΌν λΆλΆμ
- ν¬λμ£Όλ μ°μμΌλ‘ 3μμ λͺ¨λ λ§μ€μμλ€λ μ μ΄λ€.
μ¦ νμ¬ μμΉμμ OOX
, OXO
, XOO
μ κ²½μ°μ€ μ΄λ€κ²μ΄ μ μΌ λ§μ΄ λ¨Ήμμμλ κ²½μ°μΈμ§ νλ¨ν΄μ λ©λͺ¨μ΄μ μ΄μ
ν΄μ£Όλ©΄ λλ€. (맨μ€λ₯Έμͺ½μ΄ νμ¬ μμΉμ΄λ―λ‘, νμ¬ μμΉλ₯Ό κΈ°μ€μΌλ‘ νλμ , λκ°μ κ²½μ°λ₯Ό μ΄ν΄λ³΄λ©΄λλ€.)
μλ₯Όλ€μ΄ indexκ° iκ° 2μΌλλ₯Ό μ΄ν΄λ³΄λ©΄,
<OOX
>
μμΈ μμ | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
μ ν μ¬λΆ | O | O | X |
<OXO
>
μμΈ μμ | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
μ ν μ¬λΆ | O | X | O |
<XOO
>
μμΈ μμ | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
μ ν μ¬λΆ | X | O | O |
μ΄λ° μμκ° λ§λ€μ΄μ§κ² λλ€.
κ·ΈλΌ μ νμμ λ½μ보μ.
1. OOX : dp[i-1]
2. OXO : dp[i-2] + wine[i]
3. XOO : dp[i-3] + wine[i-1] + wine[i]
μ΄λ κ² 3κ°μ§μ κ²½μ°μ€ κ°μ₯ maxμΈ κ°μ dp[i]
μ μ μ₯μν¨λ€. κ·Έλ¦¬κ³ μ΅μ’
μ μΌλ‘ dp[n-1]
μ μ μ₯λλ μκ° λ§μ€μμλ μμΈμ μ΅λκ°μ΄ λ κ²μ΄λ€.dp[0]κ³Ό dp[1], dp[2]
λ μμΈμ²λ¦¬ ν΄μ€λ€.
dp[0]
μwines[0]
μμ²΄κ° μ΅λκ°μ΄ λλ€.dp[1]
μwines[0] + wines[1]
κ° μ΅λκ°μ΄ λλ€.dp[2]
λMath.max(dp[1], wines[0]+wines[2], wines[1]+wines[2])
λ₯Ό ꡬνλ€.
μ½λ
import java.util.Scanner;
public class ν¬λμ£Όμμ {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] wine = new int[n];
int[] dp = new int[n];
for(int i=0; i<n; i++){
wine[i] = sc.nextInt();
}
dp[0] = wine[0];
for(int i=1; i<n; i++){
if(i==1){
dp[1] = wine[0] + wine[1];
continue;
}
if(i==2){
dp[2] = Math.max(dp[1], Math.max(wine[0]+wine[2],wine[1]+wine[2]));
continue;
}
dp[i] = Math.max(dp[i-1], Math.max(dp[i-2]+wine[i],dp[i-3]+wine[i-1]+wine[i]));
}
System.out.println(dp[n-1]);
sc.close();
}
}
DPλ¬Έμ λ μ λ§ νμ΄λ μ μμ΄ μμλλ€... λ©λͺ¨μ΄μ μ΄μ κ³Ό μ νμμ λ½μλ΄λλ°©λ²μ κ³μ κ³ λ―Όν΄λ³΄μ.