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 |
|
| 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 |