競プロおぼえがき

おぼえがきのためのブログ

yukicoder | No.45 回転寿司

No.45 回転寿司 - yukicoderを解きました。

 

  • 問題概要

N皿の寿司が流れてきてそれぞれのお寿司の美味しさがvである。

一度流れてしまった皿はとることができず、連続で皿をとることもできない。

以上の条件のときの美味しさの合計の最大を求める。

 

  • 考え方

配列を用意して動的計画法を使う。

i皿目のときにdp[i] = max(dp[i - 1], dp[i - 2] + v[i])で更新する。

 


import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
        int N = in.nextInt();
        int[] v = new int[N + 1];
        for(int i = 0; i < N; i++){
            v[i] = in.nextInt();
        }
        int[] y = new int[N + 1];
        Arrays.fill(y, Integer.MAX_VALUE);
        y[0] = 0;
        y[1] = v[0];
        
        for(int i = 2; i < v.length; i++){
            y[i] = Math.max(y[i - 1], y[i - 2] + v[i - 1]);
        }
        System.out.println(y[N]);
    }
}