bài tập áp dụng thuật toán sắp xếp mọi người cho ý kiến

Bài 3: (7 điểm) CHỌN PHẦN THƯỞNG
Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là a[SUB]i[/SUB] (1 ≤ a[SUB]i[/SUB] ≤ 100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3 phần thưởng liên tiếp nhau trong dãy.
Viết chương trình để máy tính hướng dẫn em chọn các phần thưởng sao cho tổng giá trị của các phần thưởng nhận được là lớn nhất.
Dữ liệu vào: cho file PTHUONG.INP gồm các dòng:

- Dòng đầu tiên là số phần thưởng N

- N dòng tiếp theo lần lượt là giá trị của các phần thưởng.

Dữ liệu ra: ghi ra file PTHUONG.OUT gồm các dòng:

- Dòng đầu tiên ghi tổng giá trị lớn nhất của các phần thưởng đã chọn

- Dòng tiếp theo ghi vị trí của các phần thưởng đã chọn theo thứ tự tăng dần.

Ví dụ:


PTHUONG.INPPTHUONG.OUT
5
6
9
1
3
5
23
1 2 4 5


Hoặc

PTHUONG.INPPTHUONG.OUT
7
6
9
1
3
5
10
4
32
1 2 4 6 7
 

tengiday

Happy life
Bài này chính là bài "Bờm uống rượu" mình đã giải ở trong thread này. Bạn tham khảo từ post #4 nhé.
Mã:
https://vfo.vn/t/showthread.php?93411-Giai-giup-minh-bai-nay-bang-Quy-Hoach-Dong-voi
Có gì không hiểu bạn cứ hỏi.
 
Với bài này nhờ bạn nói rõ cách giải ko bằng qhd cho mình với dk ko ak..
và nếu cách ko làm bằng qhd này thì bài toán làm theo cách nào sẽ tôi ưu hơn vậy bạn
 

tengiday

Happy life
Mình có thể khẳng định với bạn, với bài này thì quy hoạch động là thuật toán tối ưu nhất. Độ phức tạp của thuật toán là O(n), bằng với kích cỡ của dữ liệu. Theo như thuật toán, tương đương như chúng ta chỉ cần đọc dữ liệu 2 lần là cho ra kết quả vậy (1 lần tạo F và 1 lần truy ngược). Trừ khi có cách ko cần đọc hết dữ liệu vẫn biết kết quả thì mới nhanh hơn đc, nhưng mình không nghĩ ra cách nào như vậy bởi vì ít nhất chúng ta phải đọc file toàn bộ n số mà.
Nếu ko dùng qhđ thì thô thiển nhất là dùng đệ quy quay lui để duyệt toàn bộ khả năng chọn, sau đó lựa ra sự lựa chọn đạt giá trị lớn nhất. Tuy nhiên, n có thể tới 10000, cách làm này chính là duyệt toàn bộ tổ hợp có thể lên tới ít nhất hàng trăm triệu (mình ko tính chính xác đc vì mình dở xác suất lắm).
 

Thống kê

Chủ đề
100,755
Bài viết
467,590
Thành viên
339,851
Thành viên mới nhất
Đông Âu
Top