Error in user YAML: (<unknown>): found character that cannot start any token while scanning for the next token at line 3 column 1
---
# # 🧪 入力例
` ` `
6
30 10 60 10 60 50
` ` `
* 足場の番号(1-indexed):1 2 3 4 5 6
* 高さ:`[30, 10, 60, 10, 60, 50]`
---
✅ ステップ①:DP 配列と prev 配列の定義
const dp : number [ ] = new Array ( N ) . fill ( Infinity ) ;
const prev : number [ ] = new Array ( N ) . fill ( - 1 ) ;
dp [ 0 ] = 0 ;
足場(i)
高さ h[i]
dp[i] (最小コスト)
prev[i] (直前の足場)
1
30
0
-
2
10
∞
-1
3
60
∞
-1
4
10
∞
-1
5
60
∞
-1
6
50
∞
-1
for ( let i = 1 ; i < N ; i ++ ) {
// i-1 からジャンプ
const cost1 = dp [ i - 1 ] + Math . abs ( h [ i ] - h [ i - 1 ] ) ;
// i-2 からジャンプ
const cost2 = i > 1 ? dp [ i - 2 ] + Math . abs ( h [ i ] - h [ i - 2 ] ) : Infinity ;
// 最小コスト更新
if ( cost1 < dp [ i ] ) {
dp [ i ] = cost1 ;
prev [ i ] = i - 1 ;
}
if ( cost2 < dp [ i ] ) {
dp [ i ] = cost2 ;
prev [ i ] = i - 2 ;
}
}
dp[1] = dp[0] + |10 - 30| = 0 + 20 = 20
prev[1] = 0
→ 1 → 2
dp[2] = min(
dp[1] + |60 - 10| = 20 + 50 = 70,
dp[0] + |60 - 30| = 0 + 30 = 30 ←
)
prev[2] = 0
→ 1 → 3
dp[3] = min(
dp[2] + |10 - 60| = 30 + 50 = 80,
dp[1] + |10 - 10| = 20 + 0 = 20 ←
)
prev[3] = 1
→ 1 → 2 → 4
dp[4] = min(
dp[3] + |60 - 10| = 20 + 50 = 70,
dp[2] + |60 - 60| = 30 + 0 = 30 ←
)
prev[4] = 2
→ 1 → 3 → 5
dp[5] = min(
dp[4] + |50 - 60| = 30 + 10 = 40,
dp[3] + |50 - 10| = 20 + 40 = 60
)
prev[5] = 4
→ 1 → 3 → 5 → 6
✅ ステップ③:最終的な dp / prev 配列
足場(i)
高さ h[i]
dp[i]
prev[i]
1
30
0
-
2
10
20
0
3
60
30
0
4
10
20
1
5
60
30
2
6
50
40
4
let current = N - 1 ;
while ( current !== - 1 ) {
path . push ( current + 1 ) ; // 1-indexed
current = prev [ current ] ;
}
path . reverse ( ) ;
復元過程:
current = 5 → path = [6]
prev[5] = 4 → path = [6, 5]
prev[4] = 2 → path = [6, 5, 3]
prev[2] = 0 → path = [6, 5, 3, 1]
prev[0] = -1 → 終了
→ reverse → [1, 3, 5, 6]
足場: 1 2 3 4 5 6
高さ: 30 10 60 10 60 50
↘ ↘ ↘
移動経路: 1 → 3 → 5 → 6
dp[i] は「その足場に行くまでの最小コスト」
prev[i] は「どの足場から来たか」
経路復元は prev を後ろからたどって .reverse() するだけ