31.10. Bài toán tìm tổng con lớn nhất.Giả sử một công ty du lịch đã thiết kế một chương trình du...

Câu hỏi:

31.10. Bài toán tìm tổng con lớn nhất.

Giả sử một công ty du lịch đã thiết kế một chương trình du lịch cố định đi qua lần lượt n địa điểm. Mỗi khách hàng lại có các đánh giá khác nhau cho mỗi địa điểm này. Giả sử khách hàng tên An đã đánh giá các địa điểm trong chương trình du lịch theo dãy các giá trị:

A[0], A[1], ..., A[n - 1]

Công ty muốn sắp xếp cho khách hàng An đi một phần của chương trình du lịch bằng cách đi theo một dãy con liên tục các địa điểm, ví dụ:

i, i+1,i+2,..., j

Mục đích của việc chọn chương trình cho khách hàng An là làm sao cho tổng giá trị

A[i] + A[i + 1] +... + A[j]           (1)

là lớn nhất có thể.

Cho trước dãy các đánh giá n địa điểm của chương trình du lịch, hãy thiết kế một chương trình du lịch con cho khách hàng sao cho tổng (1) là lớn nhất. Ví dụ nếu dãy các đánh giá là:

1, 7, -5, -9, 3, -1,10, -6, 5

thì chương trình du lịch con đi qua các địa điểm với đánh giá 3, -1, 10 có tổng lớn nhất tức là làm khách hàng hài lòng nhất.

Câu trả lời:
Người trả lời: GV. Đỗ Thị Ánh
Để giải bài toán này, ta có thể sử dụng phương pháp duyệt từng cặp điểm để tính tổng và so sánh với giá trị lớn nhất hiện tại. Dưới đây là một cách làm đơn giản:

1. Khởi tạo biến `imax`, `jmax` và `Smax` ban đầu bằng 0, 0, A[0] tương ứng.
2. Duyệt từng đoạn con bắt đầu từ i đến n với i từ 0 đến n-1.
3. Tính tổng của đoạn con từ i đến j và so sánh với `Smax`, nếu lớn hơn thì cập nhật `Smax`, `imax` và `jmax`.
4. In ra đoạn con tối ưu.

Sau khi thực hiện các bước trên, ta sẽ có chương trình du lịch con cho khách hàng với tổng lớn nhất.

Câu trả lời chi tiết và đầy đủ hơn có thể như sau:

```
A = [1, 7, -5, -9, 3, -1, 10, -6, 5]
n = len(A)
imax = 0
jmax = 0
Smax = A[0]

for i in range(n):
s = 0
for j in range(i, n):
s = s + A[j]
if s > Smax:
imax = i
jmax = j
Smax = s

print("Chương trình du lịch tối ưu là:")
print(imax, jmax)
for i in range(imax, jmax + 1):
print(A[i], end=" ")
```

Kết quả khi chạy chương trình sẽ in ra đoạn con với tổng lớn nhất và tối ưu cho chương trình du lịch của khách hàng.
Bình luận (0)
Nhấn vào đây để đánh giá
Thông tin người gửi
0.04590 sec| 2204.25 kb