Submission #67455835


Source Code Expand

// 綺麗に解きなおし

#include <bits/stdc++.h>
using namespace std;

/////////////////// メイン ///////////////////

int main () {
  
  //////////////////// 入力 ////////////////////

  int n, k;
  cin >> n >> k;

  vector<int> h(n);
  for (int i=0; i<n; i++) {
    cin >> h.at(i);
  }

  //////////////// 出力変数定義 ////////////////

  int result = 0;

  //////////////////// 処理 ////////////////////

  // DP用の配列
  // cost.at(i)はi番目(0始まりで)の足場への最小コスト
  // ありえる最大値より大きい値で埋めておく
  vector<int> cost(n,2e9);

  // 最初の1つは特殊処理なのでループ外で埋める
  cost.at(0) = 0;

  // 2つめ以降をもらうDPで求める
  for (int i=1; i<n; i++) {

    // その足場へ移動できる元の足場全てに対してループ
    for (int j=max(0,i-k); j<i; j++) {

      // j番目(0始まりで)からジャンプしてくる場合のコスト// 今のデータより小さかったら更新
      cost.at(i) = min(cost.at(i),cost.at(j)+abs(h.at(i)-h.at(j)));

    }

  }

  // 最後の足場の最小コストが答え
  result = cost.at(n-1);

  //////////////////// 出力 ////////////////////

  cout << result << endl;

  //////////////////// 終了 ////////////////////

  return 0;

}

Submission Info

Submission Time
Task B - Frog 2
User wightou
Language C++ 23 (gcc 12.2)
Score 100
Code Size 1378 Byte
Status AC
Exec Time 35 ms
Memory 3924 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 16
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11
Case Name Status Exec Time Memory
0_00 AC 1 ms 3488 KiB
0_01 AC 1 ms 3456 KiB
0_02 AC 1 ms 3452 KiB
0_03 AC 1 ms 3360 KiB
1_00 AC 1 ms 3360 KiB
1_01 AC 1 ms 3452 KiB
1_02 AC 14 ms 3796 KiB
1_03 AC 35 ms 3892 KiB
1_04 AC 15 ms 3900 KiB
1_05 AC 14 ms 3888 KiB
1_06 AC 15 ms 3856 KiB
1_07 AC 15 ms 3896 KiB
1_08 AC 17 ms 3852 KiB
1_09 AC 19 ms 3924 KiB
1_10 AC 26 ms 3848 KiB
1_11 AC 33 ms 3780 KiB