Cho một tập U gồm n số nguyên dương đôi một khác nhau. Tìm phần tử lớn nhất d của U sao cho tồn tại a,b,c cũng thuộc U và a+b+c=d. Ba vai trò a,b,c được phép dùng cùng một giá trị nhiều lần.
Input
Dòng đầu chứa số nguyên n.
n dòng tiếp theo lần lượt chứa các phần tử của U.
Output
In giá trị d lớn nhất thỏa mãn. Dữ liệu bảo đảm luôn có ít nhất một đáp án.
Constraints
5≤n≤1000.
1≤moˆ˜i phaˆˋn tử của U≤2⋅108.
Các phần tử của U đôi một khác nhau.
Luôn tồn tại ít nhất một d thỏa mãn.
Scoring
Subtask 1 (50% số điểm): n≤18.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
5
1
2
4
7
13
Output
13
Giải thích: Giá trị 13 thuộc tập và có thể viết thành 2+4+7; đây cũng là phần tử lớn nhất của tập nên chắc chắn là đáp án.
Lời giải tóm tắt
Phân tích: Biến đổi a+b+c=d thành a+b=d-c. Tiền xử lý mọi tổng cặp a+b, gồm cả trường hợp chọn cùng giá trị hai lần. Sau đó thử d từ lớn xuống và mọi c.
Thuật toán: Sắp xếp U. Sinh và sắp xếp mọi tổng U_i+U_j với i≤j. Duyệt ứng viên d giảm dần; nếu có c sao cho d-c xuất hiện trong danh sách tổng, in d ngay.
Chứng minh: Đẳng thức gốc tương đương hoàn toàn với a+b=d-c. Vì danh sách chứa mọi tổng cặp kể cả a=b, thuật toán phát hiện mọi biểu diễn hợp lệ. Các ứng viên d được thử giảm dần, nên ứng viên đầu tiên được phát hiện chính là giá trị lớn nhất.
Độ phức tạp: Có O(n^2) tổng cặp. Thời gian O(n^2 log n), bộ nhớ O(n^2).