mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-10 22:30:53 +08:00
build
This commit is contained in:
@@ -304,7 +304,18 @@ $$
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="min_cost_climbing_stairs_dp.rb"
|
||||
[class]{}-[func]{min_cost_climbing_stairs_dp}
|
||||
### 爬楼梯最小代价:动态规划 ###
|
||||
def min_cost_climbing_stairs_dp(cost)
|
||||
n = cost.length - 1
|
||||
return cost[n] if n == 1 || n == 2
|
||||
# 初始化 dp 表,用于存储子问题的解
|
||||
dp = Array.new(n + 1, 0)
|
||||
# 初始状态:预设最小子问题的解
|
||||
dp[1], dp[2] = cost[1], cost[2]
|
||||
# 状态转移:从较小子问题逐步求解较大子问题
|
||||
(3...(n + 1)).each { |i| dp[i] = [dp[i - 1], dp[i - 2]].min + cost[i] }
|
||||
dp[n]
|
||||
end
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
@@ -569,7 +580,27 @@ $$
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="min_cost_climbing_stairs_dp.rb"
|
||||
[class]{}-[func]{min_cost_climbing_stairs_dp_comp}
|
||||
### 爬楼梯最小代价:动态规划 ###
|
||||
def min_cost_climbing_stairs_dp(cost)
|
||||
n = cost.length - 1
|
||||
return cost[n] if n == 1 || n == 2
|
||||
# 初始化 dp 表,用于存储子问题的解
|
||||
dp = Array.new(n + 1, 0)
|
||||
# 初始状态:预设最小子问题的解
|
||||
dp[1], dp[2] = cost[1], cost[2]
|
||||
# 状态转移:从较小子问题逐步求解较大子问题
|
||||
(3...(n + 1)).each { |i| dp[i] = [dp[i - 1], dp[i - 2]].min + cost[i] }
|
||||
dp[n]
|
||||
end
|
||||
|
||||
# 爬楼梯最小代价:空间优化后的动态规划
|
||||
def min_cost_climbing_stairs_dp_comp(cost)
|
||||
n = cost.length - 1
|
||||
return cost[n] if n == 1 || n == 2
|
||||
a, b = cost[1], cost[2]
|
||||
(3...(n + 1)).each { |i| a, b = b, [a, b].min + cost[i] }
|
||||
b
|
||||
end
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
@@ -935,7 +966,23 @@ $$
|
||||
=== "Ruby"
|
||||
|
||||
```ruby title="climbing_stairs_constraint_dp.rb"
|
||||
[class]{}-[func]{climbing_stairs_constraint_dp}
|
||||
### 带约束爬楼梯:动态规划 ###
|
||||
def climbing_stairs_constraint_dp(n)
|
||||
return 1 if n == 1 || n == 2
|
||||
|
||||
# 初始化 dp 表,用于存储子问题的解
|
||||
dp = Array.new(n + 1) { Array.new(3, 0) }
|
||||
# 初始状态:预设最小子问题的解
|
||||
dp[1][1], dp[1][2] = 1, 0
|
||||
dp[2][1], dp[2][2] = 0, 1
|
||||
# 状态转移:从较小子问题逐步求解较大子问题
|
||||
for i in 3...(n + 1)
|
||||
dp[i][1] = dp[i - 1][2]
|
||||
dp[i][2] = dp[i - 2][1] + dp[i - 2][2]
|
||||
end
|
||||
|
||||
dp[n][1] + dp[n][2]
|
||||
end
|
||||
```
|
||||
|
||||
=== "Zig"
|
||||
|
||||
Reference in New Issue
Block a user