VSTEPS - Steps - Bậc thang

Tags: dp

Problem

https://vn.spoj.com/problems/VSTEPS

https://oj.vnoi.info/problem/VSTEPS

Bờm chơi trò chơi điện tử Lucky Luke đến màn phải điều khiển Lucky leo lên một cầu thang gồm n bậc.

Các bậc thang được đánh số từ 1 đến n từ dưới lên trên. Lucky có thể đi lên một bậc thang, hoặc nhảy một bước lên hai bậc thang. Tuy nhiên một số bậc thang đã bị thủng do cũ kỹ và Lucky không thể bước chân lên được. Biết ban đầu, Lucky đứng ở bậc thang số 1 (bậc thang số 1 không bao giờ bị thủng).

Chơi đến đây, Bờm chợt nảy ra câu hỏi: có bao nhiêu cách để Lucky leo hết được cầu thang? (nghĩa là leo đến bậc thang thứ n). Bờm muốn nhờ bạn trả lời câu hỏi này.

Dữ liệu

  • Dòng đầu tiên: gồm 2 số nguyên nk, là số bậc của cầu thang và số bậc thang bị hỏng (0 ≤ k < n ≤ 10^5).
  • Dòng thứ hai: gồm k số nguyên cho biết chỉ số của các bậc thang bị hỏng theo thứ tự tăng dần.

Kết quả

In ra phần dư của số cách Lucky leo hết cầu thang khi chia cho 14062008.

Ví dụ

Input
4 2
2 3

Output
0
Input
90000 1
49000

Output
4108266

Tutorial

Gợi ý: giải thuật Quy hoạch động đơn giản.

Gọi F[i] là số cách leo đến bậc thang thứ i. Nếu bậc thứ i thủng thì F[i] = 0, trái lại F[i] chỉ có thể leo từ bậc i-1 hoặc i-2, nên F[i] = F[i-1] + F[i-2] (không quan tâm i-1 với i-2 có thủng hay không vì nếu có thủng thì nó cũng bằng 0, không ảnh hưởng đến F[i])

Độ phức tạp: O(N).


Submission

VSTEPS.cpp