atcoder.jp

B - Frog 2 / atcoder.jp

건이두 2019. 12. 26. 19:49
728x90

A - Frog 1을 푸셨다면 충분히 풀 수 있는 문제입니다.

\begin{aligned}
문제 정의에 따라서, 2\leq N \leq 10^5 \\
v_i : i 번째\quad 까지도착하는대\quad 도달하는\quad 최소\quad 비용 (0 \leq i < N) \\
h_i 는 각 돌의 이동 비용 \\
v_i = min(abs(h_{i-k}-h_i)+v_{i-k}) \quad 1 \leq k < K \quad and \quad i-k \geq 0 \\
\end{aligned}

    import java.util.Scanner;

    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            int K = sc.nextInt();
            int[] h = new int[N];

            for(int i=0; i<N; ++i) {
                h[i] = sc.nextInt();
            }

            int r = jump(N, K, h);
            System.out.println(r);
        }

        public static int jump(int N, int K, int[] h) {
            int[] v = new int[N];

            K = Math.min(N-1, K);

            for(int j=1; j<N; ++j) {
                int t = Integer.MAX_VALUE;
                boolean bContinue = true;
                for(int d=1; d<=K && bContinue; ++d) {
                    int i = j-d;
                    if(i>=0){
                        t = Math.min(Math.abs(h[i]-h[j]) + v[i], t);
                    }
                    else {
                        bContinue = false;
                    }
                }

                v[j] = t;
            }

            return v[N-1];
        }
    }
728x90