https://www.acmicpc.net/problem/2156
μ½λ
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
for(int i=0; i<n; i++)
arr[i] = scan.nextInt();
// μμ κ°μκ° 1μΌλ -> κ·Έμ λ§μλ©΄ λ¨
if(n>=1)
dp[0] = arr[0];
// μμ κ°μκ° 2μΌλ -> 첫μ + λλ²μ§Έμ λ§μλ©΄ λ¨
if(n>=2)
dp[1] = arr[0] + arr[1];
// μμ κ°μκ° 3μΌλ -> (첫μ+λλ²μ§Έμ) , (첫μ+μΈλ²μ§Έμ) , (λλ²μ§Έμ+μΈλ²μ§Έμ) μ€ ν° κ° λΉκ΅
if(n>=3)
dp[2] = Math.max(dp[1], Math.max(arr[0]+arr[2], arr[1]+arr[2]));
for(int i=3; i<n; i++) {
dp[i] = Math.max(dp[i-3]+arr[i-1]+arr[i], dp[i-2]+arr[i]);
dp[i] = Math.max(dp[i], dp[i-1]);
}
System.out.println(dp[n-1]);
scan.close();
}
}
νμ΄
DP(λμ κ³νλ²) λ¬Έμ λ κ²½μ°μ μλ₯Ό μ°Ύκ³ , μ νμμ μΈμ°λκ²μ΄ μ°μ μΈ κ² κ°λ€.
μ λ¬Έμ μμ μ€μν 쑰건μ 2λ²μ§ΈμΈ λ€μ 쑰건μ΄λ€.
* μ°μμΌλ‘ λμ¬ μλ 3μμ λͺ¨λ λ§μ€ μλ μλ€.
μ λ¬Έμ μμ νμ¬ λ¨Ήλ ν¬λμ£Όμ ν©μ μ΅λλ‘ λ§λ€ κ²½μ°λ₯Ό μκ°ν΄λ³΄λ©΄
1) νμ¬ ν¬λμ£Όλ₯Ό λ§μκ³ , μ΄μ ν¬λμ£Όλ₯Ό λ§μ κ²½μ°
2) νμ¬ ν¬λμ£Όλ₯Ό λ§μκ³ , μ΄μ ν¬λμ£Όλ₯Ό λ§μμ§ μμ κ²½μ°
3) νμ¬ ν¬λμ£Όλ₯Ό λ§μμ§ μμ κ²½μ°
λ‘ μ΄ μΈκ°μ κ²½μ°λ‘ λλ μ μλ€.
dp[i] : iλ²μ§ΈκΉμ§ λ§μ ν¬λμ£Ό μ€ μ΅λλ‘ λ§μ€μ μλ μ
arr[i] : iλ²μ§Έμ λ§μλ ν¬λμ£Όμ μ
μμ κ°μ΄ λ§μ§λ§μ, λ§μ§λ§ μ μμ λ§μ ¨μ κ²½μ°, λ§μ€μ μλ ν¬λμ£Όμ μ΅λ μμ
dp[i] = dp[i-3] + arr[i-1] + arr[i] μ΄λ€.
λ λ²μ§Έλ‘λ, λ§μ§λ§μμ λ§μκ³ , κ·Έ μμμ λ§μμ§ μμμ κ²½μ°λ₯Ό 보μ.
μμ κ°μλ λ§μ€μ μλ ν¬λμ£Όμ μ΅λ μμ
dp[i] = dp[i-2] + arr[i] μ΄λ€.
μΈ λ²μ§Έλ‘ λ§μ§λ§μμ λ§μμ§ μμμ κ²½μ°μλ κ·Έ μ λμμ λ§μκ² λλ€.
λ°λΌμ μμ κ°μλ λ§μ€μ μλ ν¬λμ£Όμ μ΅λ μμ
dp[i] = dp[i-1] μ΄λ€.
μμμ ꡬν 3κ°μ μ νμ μ€ μ΅λκ°μ μ°ΎμΌλ©΄ λλ€.
dp[i-3] + arr[i-1] + arr[i] , dp[i-2] + arr[i] , dp[i-1]
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Codeforces] 677A: Vanya and Fence (0) | 2020.03.01 |
---|---|
[λ°±μ€] 4641λ²: Doubles(μμ νμ) (0) | 2020.02.29 |
[λ°±μ€] 2437λ²: μ μΈ(그리λ) (0) | 2020.02.28 |
[λ°±μ€] 1236λ²: μ± μ§ν€κΈ°(ꡬν) (1) | 2020.02.27 |
[λ°±μ€] 1449λ²: μ리곡 νμΉ(그리λ, μ λ ¬) (0) | 2020.02.27 |
λκΈ