Bạn có thể xem xét các khoản + 1/-1, giống như trên đồ thị của tôi. Chúng tôi bắt đầu lúc 0 (không quan trọng).
Vì vậy: bạn muốn, khi xem xét điểm bất cứ điều gì, để có được những ở bên trái điểm khác đó là xa nhất và dưới nó.
1 xây dựng và duy trì tổng
Phải mất n lần lặp: O (n)
2 xây dựng một giá trị bảng => điểm, iterating mỗi điểm, và giữ được nhiều nhất ở bên trái:
Bạn nhận được: 0 => a, 1 => b (không d), 2 => c (không phải e, i, k), 3 => f (không phải h), 4 => g (không phải m), 5 => n, 6 => o
Mất n lần lặp: O (N)
3 ở mỗi cấp (nói 0, 1, 2, 3, ...) => bạn giữ điểm xa nhất, đó là bên dưới nó:
mức 0 => a
mức 1 => a
etc. => nó sẽ luôn là a.
Giả sử đồ thị bắt đầu tại điểm g:
4 => g
3 => h
2 => i
5 => g
6 => g
Sau đó: nếu một điểm chỉ trên 3 (sau đó 4: dưới dạng m) => nó sẽ là h
Cũng cần có n hoạt động ở mức tối đa (chiều cao của biểu đồ chính xác).
4 lặp lại từng điểm: B [i] của bạn.
Tại mỗi điểm, giả sử h: sum = 3, bạn lấy nhiều nhất bên dưới nó (bảng hoạt động 3): trong lược đồ của tôi, nó luôn là = 0;
Giả sử đồ thị bắt đầu tại điểm g:
cho điểm
g, h, i, k => không có gì
j => i
l => i
m => h
n => g
Bạn có thể kết hợp một số thao tác trong cùng một lần lặp.
Tôi giả sử bạn muốn thuật toán, không phải là triển khai trong C++? – erip
@erip Hoặc là hoạt động –
@Phil Moesch Yeah ... bạn có thể cụ thể hơn không? –