Câu hỏi:
18/10/2022 235Bà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 sắ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.
Quảng cáo
Trả lời:
Hướng dẫn:
Gọi S(i, j) = A[i] + A[i + 1] + ... + A[j]
Khi đó bài toán đặt ra là cần tìm i, j sao cho giá trị S(i, j) lớn nhất. Từ đó suy ra lời giải đơn giản 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 = " ")
Hot: Học hè online Toán, Văn, Anh...lớp 1-12 tại Vietjack với hơn 1 triệu bài tập có đáp án. Học ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Lời giải
Chương trình có thể viết như sau:
a = float(input("Nhập số thực dương a:"))
while a <= 0:
print("Nhập sai, số a phải lớn hơn 0. Hãy nhập lại.")
a = float(input("Nhập số thực dương a:"))
Lời giải
Hướng dẫn:
Từ yêu cầu của đề bài chúng ta sẽ thiết lập thủ tục chính printBCC() có chức năng in bảng cửu chương. Thủ tục này sẽ có hai phần độc lập, phần đầu in 5 khối thuộc hàng thứ nhất là bảng cửu chương của các số 1, 2, 3, 4, 5. Phần sau của thủ tục sẽ in 5 khối thuộc hàng thứ hai là bảng cửu chương của các số 6, 7, 8, 9, 10.
Để thể hiện chính xác và cân đối trên màn hình chúng ta thiết lập thêm hai hàm:
- Hàm st(num) để tạo xâu kí tự thể hiện số num. Nếu num là số có 1 chữ số thì st(num) sẽ chèn 1 dấu cách phía trước num.
- Hàm space(k) thể hiện k dấu cách trên màn hình.
Nhập, chạy thử và kiểm tra kết quả chương trình sau:
def st(n):
if n < 10:
return" "+str(n)
else:
return str(n)
def space(k):
return" "*k
def printBCC():
for h in range (10):
i = h+1
for j in range (1,6):
print(st(j) + " x " + st(i) + " = " + st(i*j) + space(2), end = " ")
print()
print()
for h in range(10):
i = h+1
for j in range (6,11):
print(st(j) + " x " + st(i) + " = " + st(i*j) + space(2), end = " ")
print()
# Chương trình chính
printBCC()
* Chương trình nhập lên phần mềm lập trình Python:
* Kết quả chạy thử chương trình:
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Trắc nghiệm Tin học 10 Kết nối tri thức Bài 29 có đáp án
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 27 có đáp án
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 28 có đáp án
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 26 có đáp án
Đề kiểm tra học kì 2 Tin học 10 Kết nối tri thức có đáp án - Đề 1
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 22 có đáp án
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 20 có đáp án
15 câu trắc nghiệm Tin học 10 Kết nối tri thức Bài 21 có đáp án
Hãy Đăng nhập hoặc Tạo tài khoản để gửi bình luận