Professional Documents
Culture Documents
Sa mạc là lưới ô cấp M x N. Trên mỗi ô lưới người ta ghi 1 số nguyên a gọi
là năng lượng của ô đó. Một con lạc đà đi từ ô (1,1) đến ô (m,n). Tìm đường
đi sao cho đường đi của lạc đà có tổng lớn nhất. Biết rằng lạc đà chỉ đi sang
2 ô (i+1,j) hoặc (I,j+1)
SAMAC.INP SAMAC.OUT
45 41
15134 11
67915 21
11841 22
13433 23
33
34
44
45
1 2 3 4 5
1 1 5 1 3 4
2 6 7 9 1 5
Mảng
A 3 1 1 8 4 1
4 1 3 4 3 3
1 2 3 4 5
1 1 6 7 10 14 B[1,j]=b[1,j-1]+a[1,j]
2 7 14 23 24 29
Bảng B
3 8 15 31 35 36 B[i,j]=max(b[i-1,j], b[i,j-1])+a[i,j]
4 9 18 35 38 41
B[i,1]=b[i-1,1]+a[i,1]
1 2 3 4 5
1 1 2 2 2 2
2 1 2 2 2 2
Bảng T
3 1 1 1 2 2
4 1 1 1 1 2
A - 2 5 3 4 2
0 1 2 3 4 5
- 2 3 4
L 1 2 3 3 4 2
0 1 2 3 4 5
L[i] = max (1, L[j]+1) với j từ 0 -> i-1 và a[j] < a[i]
T
0 1 2 3 4 5
Đặc trưng:
i) Các phần tử trong dãy kết quả chỉ xuất hiện 1 lần. Vì vậy phương pháp
làm là ta sẽ dùng vòng For duyệt qua các phần tử ai trong dãy, khác với các
bài toán của mô hình 4(đặc trưng là bài toán đổi tiền), các phần tử trong dãy
có thể được chọn nhiều lần nên ta thực hiện bằng phương pháp cho giá trị
cần quy đổi tăng dần từng đơn vị.
ii) Thứ tự của các phần tử được chọn phải được giữ nguyên so với dãy ban
đầu.
Đặc trưng này có thể mất đi trong một số bài toán khác tùy vào yêu cầu cụ
thể. Chẳng hạn bài Tam giác bao nhau.
3. Cài đặt
Bảng phương án là một mảng một chiều L để lưu trữ các giá trị của hàm
QHĐ L(i). Đoạn chương trình tính các giá trị của mảng L như sau:
for i := 1 to n do begin
L[i] := 1;
for j:=1 to i–1 do
if (a[j]<=a[i]) and (L[i]<L[j]+1) then
L[i]:=L[j]+1;
end;
Như vậy chi phí không gian của bài toán là O(n), chi phí thời gian là O(n2).
Có một phương pháp cài đặt tốt hơn so với phương pháp trên, cho chi phí
thời gian là O(nlogn
S1 A L G O R I T H M
0 1 2 3 4 5 6 7 8
S2 L O G A R I T H M
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9
A L G O R I T H M
0
1 L
2 O
3 G
4 A
Bảng L
5 R
6 I
7 T
8 H
9 M