---
# System prepended metadata

title: 746. Min Cost Climbing Stairs

---

### [746. Min Cost Climbing Stairs](https://leetcode.com/problems/min-cost-climbing-stairs/?envType=daily-question&envId=2023-10-13)

# 1. Tóm tắt đề bài

Cho một mảng `cost` với `cost[i]` chính là giá phải trả khi bước vào nấc thang thứ `i` trên một chiếc cầu thang. Sau khi trả giá cho nấc thang thứ `i`, bạn có thể lựa chọn tiến $1$ hoặc $2$ bước.

Bạn có thể bắt đầu từ nấc thang $0$ hoặc $1$ và trả tiền cho nấc đó.

Hãy tính tổng giá trị nhỏ nhất sau khi đi hết nấc thang cuối.

##### Giới hạn

- $2 \le cost.length \le 1000$.
- $0 \le cost[i] \le 999$.

# 2. Tóm tắt lời giải

**Độ phức tạp dự tính: $O(n)$**

Đây là một bài $dp$ căn bản, khi mà kết quả khi tính đến bậc thang thứ $i$ ($i \ge 2$) sẽ được tính dựa vào kết quả $i - 1$ và $i - 2$. Vì vậy, bài này sẽ có chút hình hài của Fibonacci.

# 3. Lời giải chi tiết

Ta định nghĩa $f(i)$ là giá trị nhỏ nhất phải trả khi đi đến nấc thang thứ $i$.

Công thức tính như sau:

- $f(0) = cost[0]$.
- $f(1) = cost[1]$.
- $f(i) = cost[i] + max(f[i - 1], f[i - 2]) \forall i: 1 < i < n$.

Kết quả chính là $max(f[n - 1], f[n - 2])$.

Như trong code mẫu của mình, mình đã gán giá trị trên vào chính $f[n]$.

### Độ phức tạp thuật toán

Thời gian: $O(n)$.

Bộ nhớ mở rộng: $O(n)$.

### [Code mẫu](https://leetcode.com/problems/min-cost-climbing-stairs/submissions/1073954648/?envType=daily-question&envId=2023-10-13)


# 4. Kết luận & Gợi ý mở rộng

Các bạn có thể tham khảo các bài QHĐ rất dễ ở dưới đây:

[509. Fibonacci Number](https://leetcode.com/problems/fibonacci-number/)
[118. Pascal's Triangle](https://leetcode.com/problems/pascals-triangle/)
[1025. Divisor Game](https://leetcode.com/problems/divisor-game/)


Hoặc xem chuyên đề #0 của mình.