Professional Documents
Culture Documents
PhamQuangDu 2121COMP140103
PhamQuangDu 2121COMP140103
Cho n số nguyên, 𝑎1,𝑎2,...,𝑎𝑛. Tổng tích là tổng lớn nhất mà được thực hiện
bằng cách nhân các số kề nhau trong danh sách, sau đó cộng các tích này lại.
Quy định: một số chỉ được phép nhân tối đa một lần với lân cận của nó (hoặc
trước, hoặc sau nó).Ví dụ: cho dãy 1,2,3,1thì tổng tích cần tìm là
8=1+(2∗3)+1(số 2 chỉ được nhân một lần với số 3, và không được nhân thêm
với số1 trước nó), hoặc dãy 2,2,1,3,2,1,2,2,1,2 thì tổng tích cần tìm là
19=(2∗2)+1+(3∗2)+1+(2∗2)+1+2.Yêu cầu: thiết kế và cài đặt giải thuật quy
hoạch động để giải vấn đề trên.
PHÁT BIỂU BÀI TOÁN
Ta khởi tạo mảng hai chiều f có kích thước n*2.
Đầu tiên, xác định bài toán con:
Gọi f[i][0] là giá trị lớn nhất nếu phép toán gần nhất là cộng.
Gọi f[i][1] là giá trị lớn nhất nếu phép toán gần nhất là nhân.
Tiếp theo, xác định bài toán cơ sở:
f[0][0] = a[0] + a[1]
f[0][1] = a[0] * a[1]
Tiếp theo, xác định định đáp án của bài toán: Sau khi duyệt đến cuối a[]
thì đáp án của bài toán sẽ là giá trị lớn nhất giữa f[i][0] và f[i][1].
Cuối cùng, xác định công thức truy hồi:
f[i][0] = max(f[i - 1][0], f[i - 1][1]) + a[i + 1];
f[i][1] = (f[i - 1][0] - a[i]) + (a[i] * a[i + 1]);
Ví dụ 2:
TÀI LIỆU THAM KHẢO