canuc80k1200·1/50

Bậc Đá Tối Ưu

Nộp bài trên LQDOJ

Bài 12 · Dynamic Programming

Có bậc đá được đánh số từ đến ; bậc có độ cao . Một robot bắt đầu ở bậc . Từ bậc , robot được chuyển đến bậc hoặc nếu bậc đó tồn tại. Mỗi lần chuyển từ sang tốn đơn vị năng lượng. Hãy tìm tổng năng lượng nhỏ nhất để robot đến bậc .

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa số nguyên .

Output

  • In một số nguyên là tổng chi phí nhỏ nhất để đến bậc .

Constraints

  • .
  • với mọi .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5
8 13 4 10 7

Output

7

Giải thích: Có thể đi qua các bậc , tốn . Mọi đường đi khác đều có tổng chi phí không nhỏ hơn.

Lời giải tóm tắt
  • Ý tưởng: Đặt dp[i] là tổng năng lượng nhỏ nhất để đến bậc i. Ta có dp[1]=0, dp[2]=|h_2-h_1|; với i≥3:
  • Ý tưởng: dp[i] = min(dp[i-1] + |h_i-h_{i-1}|, dp[i-2] + |h_i-h_{i-2}|).
  • Chứng minh tính đúng đắn: Ta chứng minh bằng quy nạp theo i. Hai giá trị cơ sở đúng trực tiếp. Với i≥3, bước cuối của mọi đường đi tới i phải xuất phát từ đúng một trong hai bậc i-1 hoặc i-2. Theo giả thiết quy nạp, chi phí tốt nhất để tới mỗi bậc tiền nhiệm lần lượt là dp[i-1] và dp[i-2]; cộng chi phí bước cuối rồi lấy giá trị nhỏ hơn vì thế xét đủ mọi đường đi và chọn đúng đường có chi phí nhỏ nhất. Do đó dp[N] là đáp án.
  • Độ phức tạp: Thời gian O(N) và bộ nhớ O(N).