Đếm số đường đi trên lưới

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: inp
Output: out

Dạng bài

Bài 6. Đếm số đường đi trên lưới

Mô tả

Cho một lưới kích thước n x m.

Bạn xuất phát từ ô (1,1) và cần đi tới ô (n,m). Mỗi bước bạn chỉ được phép:

  • đi sang phải
  • hoặc đi xuống dưới

Hãy đếm số đường đi khác nhau từ ô đầu đến ô cuối. Vì kết quả có thể rất lớn, hãy in ra theo modulo 1000000007.

Input

Gồm một dòng chứa hai số nguyên nm.

Output

In ra số đường đi khác nhau từ (1,1) đến (n,m) theo modulo 1000000007.

Giới hạn

  • 1 <= n, m <= 2000

Subtask

  • Subtask 1 (20%): 1 <= n, m <= 10
  • Subtask 2 (30%): 1 <= n, m <= 100
  • Subtask 3 (50%): 1 <= n, m <= 2000

Hướng dẫn giải

Gọi dp[i][j] là số đường đi từ ô (1,1) đến ô (i,j).

Nhận xét

Để tới ô (i,j), bước cuối cùng chỉ có thể đến từ:

  • ô phía trên (i-1,j)
  • hoặc ô bên trái (i,j-1)

Vì vậy:

dp[i][j] = dp[i-1][j] + dp[i][j-1]

Lấy modulo 1000000007 sau mỗi lần cộng.

Khởi tạo
  • dp[1][1] = 1
  • Hàng đầu tiên chỉ có đúng 1 cách đi: đi toàn sang phải
  • Cột đầu tiên cũng chỉ có đúng 1 cách đi: đi toàn xuống dưới
Thứ tự tính

Duyệt i từ 1..n, với mỗi i duyệt j từ 1..m.

Độ phức tạp
  • Thời gian: O(n*m)
  • Bộ nhớ: O(n*m)

Có thể tối ưu bộ nhớ xuống O(m) nếu chỉ lưu một hàng DP.

Ví dụ

Input
3 4
Output
10

Giải thích ví dụ

Từ (1,1) đến (3,4) bạn cần đi:

  • 2 bước xuống
  • 3 bước sang phải

Tổng cộng có 5 bước, và chỉ cần chọn vị trí cho 2 bước xuống (hoặc 3 bước sang phải), nên có:

C(5,2) = 10

đường đi.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.