1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuyên đề bồi dưỡng hsg: phương pháp tham lam

6 1,5K 71

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 39,38 KB

Nội dung

Ghép cặp số: Hãy ghép 2n số thành n cặp số sao cho tổng của tích các cặp số là lớn nhất biết rằng mỗi số chỉ được chọn ghép một lần.. Kết quả: ghi ra màn hình tổng và các cặp số.. - Dòng

Trang 1

CHUYÊN ĐỀ NÂNG CAO 5

CHUYÊN ĐỀ 5: PHƯƠNG PHÁP THAM LAM

1 Giới thiệu

Phương pháp tham lam là một mô hình thuật toán dùng để giải quyết bài toán tối ưu tổ hợp.

Phương pháp này xây dựng lời giải của bài toán qua từng bước, tại mỗi bước luôn chọn kết quả tối ưu nhất cho bước đó.

Ưu điểm: Có thể áp dụng cho bài toán tối ưu, ý tưởng đơn giản, dễ cài đặt

Hạn chế: thuật toán tham lam không phải khi nào cũng cho kết quả tối ưu

2 Một số ví dụ

2.1 Ghép cặp số:

Hãy ghép 2n số thành n cặp số sao cho tổng của tích các cặp số là lớn nhất biết rằng mỗi số chỉ

được chọn ghép một lần

Dữ liệu: n và a[1], a[2], ,a[2n] nhập từ bàn phím.

Kết quả: ghi ra màn hình tổng và các cặp số

Ví dụ:

2

1 3 4 2

- Tổng: 14

- Các cặp: (1,2); (3,4) 5

1 3 -4 2 0 1

- Tổng: 7

- Các cặp: (-4,0), (1,1); (3,2)

* Phân tích bài toán

input: N, a[1],a[2], ,a[2n]

Output: tổng S, N cặp số

* Ý tưởng thuật toán

Tại mỗi bước chọn cặp (a,b) sao cho a*b lớn nhất có thể

* Thuật toán

1 Nhập N, a[1], ,a[2n] từ bàn phím

2 Sắp xếp các a[i] giảm dần

3 Tham

Tong:=0 For i=1 to n do Tong:=Tong+a[2i-1]*a[2i]

4 In kết quả:

Tổng lớn nhất là: Tong Cách ghép các số là: (a[2i-1],a[2i]) với i=1…n.

2.2 Mua kẹo:

Siêu thị bày bán n gói kẹo, gói thứ i có giá là a[i] (1<=i<=n) Tí muốn dùng số tiền m để mua kẹo.

Hãy giúp Tí chọn các gói để mua sao cho số gói kẹo mua được nhiều nhất Nếu cùng mua được số gói như nhau thì chọn phương án tốn ít nhất

Dữ liệu: file văn bản MUAKEO.INP

- Dòng đầu ghi 2 số nguyên n và m

- Dòng thứ hai ghi n số nguyên a[1], a[2], ,a[n]

Kết quả: file văn bản MUAKEO.OUT

Trang 2

- Dòng đầu ghi số gói mua được

- Dòng thứ 2: ghi số tiền còn lại sau khi mua

* Các số trong file cách nhau một dâu cách

Ví dụ:

3 5

3 4 2

2 0

5 7

1 3 7 1 4

3 2

* Phân tích bài toán

input: n, m, a[1],a[2], ,a[n]

Output: số gói S và số tiền còn lại T

* Ý tưởng thuật toán

Khi mua một món quà ta chọn món quà ít tiền nhất có thể

* Thuật toán

1 Đọc N,M, a[1], ,a[n] từ file

2 Sắp xếp các a[i] tăng dần

3 Tham

S:=0; T:=M;

For i:=1 to n do If T>=a[i] then

S:=S+1;

T:=T-a[i]

4 In kết quả

Ghi vào file trên mỗi dòng lần lượt S và T.

Lưu ý: Sau khi viết chương trình, cần test kỹ lưỡng, xét hết các trường hợp đặc biệt

3 Một số bài tập vận dụng

3.1 Vắt sữa bò: Ntucoder

Vào một buổi sáng anh Bo sắp một đàn bò gồm n con bò để vắt sữa Anh dự kiến là vào sáng hôm đó, con bò thứ i có khả năng sẽ vắt được ai lít sữa Tuy nhiên đàn bò của anh có đặc tính là cứ mỗi lần vắt sữa một con, những con còn lại trông thấy sợ quá nên sẽ bị giảm sản lượng mỗi con 01 lít sữa Nếu vắt sữa con bò thứ nhất, n-1 con còn lại bị giảm sản lượng Sau đó vắt sữa con bò thứ hai thì n-2 con còn lại

bị giảm sản lượng Bạn hãy giúp anh Bo tính xem thứ tự vắt sữa bò như thế nào để số lượng sữa vắt được là nhiều nhất nhé

Dữ liệu vào: gồm 2 dòng

- Dòng thứ nhất là số nguyên n (1 ≤ n ≤ 100) là số lượng con bò

- Dòng thứ hai gồm n số nguyên a1, a2, , an (1 ≤ ai ≤ 1000) là sản lượng sữa của các con bò

Dữ liệu xuất:

- Là một số nguyên xác định số lít sữa nhiều nhất mà anh Bo có thể vắt được

Ví dụ

input

4

4 4 4 4

output

10

input

Trang 3

2 1 4 3

output

6

- Trong test 1: vắt sữa con bò 1 (được 4), lượng sữa còn lại là 3 3 3; vắt sữa con bò 2 (được 3), lượng sữa còn lại là 2 2, vắt sữa con bò 3 (được 2) và con bò 4 (được 1), tổng cộng 10

- Trong test 2: vắt sữa con bò 1 (được 2), lượng sữa còn lại là 0 3 2; vắt sữa con bò 3 (được 3) và vắt sữa con bò 4 (được 1) tổng cộng 6

3.2 Phân tích số

Cho số nguyên dương N Hãy phân tích N thành tổng các số nguyên dương không lớn hơn N sao cho tích

của chúng lớn nhất

Dữ liệu: file văn bản PTSO.INP

- Ghi số nguyên n

Kết quả: file văn bản PTSO.OUT

- Dòng đầu ghi m đầu là số lượng các số nguyên dương trong cách phân tích

- Dòng thứ 2 ghi m số tìm được theo thứ tự tăng dần

* Các số trong file cách nhau một dâu cách

Ví dụ:

PTichSO.INP PTichSO.OUT

Giới hạn: 1<=n<=1000000;

3.3 Nối xích: http://laptrinh.ntu.edu.vn/Problem/Details/4398

Người ta có n đoạn dây xích, mỗi đoạn dây xích là chuỗi gồm a[i] (i=1 n) mắt xích được nối với

nhau Các đoạn dây xích này tách rời nhau Bằng cách cắt ra một mắt xích, sau đó hàn lại, ta có thể nối hai dây xích thành một đoạn Thời gian để cắt và hàn mỗi mắt xích là 1 đơn vị thời gian và được xem là bằng nhau với mọi mắt xích Nhiêm vụ của bạn là phải nối chúng lại thành một đoạn dây xích duy nhất với thời gian ít nhất (hay số mắt xích bị cắt và hàn lại là ít nhất)

Dữ liệu: file văn bản NOIXICH.INP

- Dòng đầu ghi số nguyên n

- Các dòng tiếp theo ghi n số nguyên a[1], a[2], ,a[n]

Kết quả: file văn bản NOIXICH.OUT

- Ghi duy nhất số đơn vị thời gian cần nối n đoạn xích đã cho

* Các số trong file cách nhau một dâu cách

Ví dụ:

3

2 3 4

2

5

1 2 3 4 5

3

Giới hạn: 1<=n<=20000; 1<=a[i]<= 2000;

3.4 Sửa xe: Nguồn: http://vn.spoj.com/problems/CAR/

Một cơ sở sửa chữa ô tô có nhận n chiếc xe để sửa Do các nhân viên làm việc quá lười nhác nên

đã đến hạn trả cho khách hàng mà vẫn chưa tiến hành sửa được chiếc xe nào Theo hợp đồng đã ký kết

từ trước, nếu bàn giao xe thứ i quá hạn ngày nào thì sẽ phải trả thêm một khoản tiền phạt là a[i] (i=1 n).

Trang 4

Ông chủ cơ sở sửa chữa quyết định sa thải toàn bộ công nhân và thuê nhân công mới Với lực

lượng mới này, ông ta dự định rằng để sửa chiếc xe thứ i sẽ cần b[i] (i=1 n) ngày Vấn đề đặt ra đối với

ông là phải lập lịch sửa tuần tự các chiếc xe sao cho tổng số tiền bị phạt là ít nhất

Dữ liệu: file văn bản SUAXE.INP

- Dòng đầu ghi số nguyên n

- Dòng thứ hai ghi n số nguyên a[1], a[2], ,a[n]

- Dòng thứ ba ghi n số nguyên b[1], b[2], ,b[n]

Kết quả: file văn bản SUAXE.OUT

- Dòng đầu ghi một số duy nhất chi phí tối thiểu

- Dòng thứ hai ghi lần lượt số hiệu các xe cần sửa

* Các số trong file cách nhau một dâu cách

Ví dụ:

4

1 3 4 2

3 2 3 1

44

4 2 3 1

Giải thích:

• Xong công việc 4 vào cuối ngày 1 => phải trả 2 * 1 = 2

• Xong công việc 2 vào cuối ngày 3 => phải trả 3 * 3 = 9

• Xong công việc 3 vào cuối ngày 6 => phải trả 6 * 4 = 24

• Xong công việc 1 vào cuối ngày 9 => phải trả 1 * 9 = 9

• Vậy tổng cộng phải trả 44

Giới hạn: 1<=n<=1000; 1<=a[i]<=100; 1<=b[j]<=100;

3.5 Nối điểm đen trắng: Đề thi HSG quốc gia: http://vn.spoj.com/problems/BWPOINTS/

Trên trục số thực cho n điểm đen và n điểm trắng hoàn toàn phân biệt Các điểm đen có tọa độ nguyên a[1],a[2], ,a[n] còn các điểm trắng có tọa độ nguyên b[1],b[2], ,b[n] Người ta muốn chọn ra

k điểm đen và k điểm trắng để nối mỗi một điểm đen với một điểm trắng sao cho k đoạn thẳng tạo được đôi một không có điểm chung Hãy tìm giá trị k lớn nhất thỏa mãn yêu cầu trên.

Dữ liệu: file văn bản NOIDIEM.INP

- Dòng đầu ghi số nguyên n

- Dòng thứ hai ghi n số nguyên a[1], a[2], ,a[n]

- Dòng thứ ba ghi n số nguyên b[1], b[2], ,b[n]

Kết quả: file văn bản NOIDIEM.OUT

Ghi duy nhất số k tìm được.

* Các số trong file cách nhau một dâu cách

Ví dụ:

3

0 3 1 -3 5 -1

2

Trang 5

Giới hạn:

1<=n<=10000; |a[i]|,|b[i]|<=1000000000;

Trong một lần tổ chức Olympic Tin học sinh viên, có N cuộc thi được đánh số từ 1 đến N Cuộc thi thứ I có thời điểm bắt đầu là Si và kết thúc là Fi Tại mỗi thời điểm trong mỗi phòng thi có không quá một cuộc thi diễn ra ngoại trừ trường hợp thời điểm kết thúc một cuộc thi có thể đồng thời là thời điểm bắt đầu của một cuộc thi khác

Hãy xếp phòng thi cho tất cả các cuộc thi sao cho số phòng cần sử dụng là ít nhất

Dữ liệu vào: Từ file văn bản Room.inp gồm:

- Dòng thứ nhất ghi số nguyên dương N (n<=1000)

- Trên dòng thứ i trong N dòng tiếp theo là hai số nguyên Si và Fi

Dữ liệu ra: Ghi kết quả vào tệp Room.out là số phòng cần sử dụng

5

0 2

1 2

3 4

2 5

4 5

2

3.7 Trò chơi bốc bài:

Tí và Tèo chơi bốc bài như sau: trên bàn có N lá bài (N ≤ 103) xếp thành một hàng, trên mỗi lá bài có ghi

số nguyên dương Qi (1 ≤ i ≤ N), các số là phân biệt Tí và Tèo luân phiên nhau chơi, mỗi người tới lượt mình sẽ chọn một trong hai quân bài ngoài cùng (phải nhất hoặc trái nhất) và bốc quân bài đó lên Trò chơi kết thúc khi không còn quân bài nào trên bàn, người thắng cuộc là người có tổng các số ghi trên các quân bài của mình lớn hơn

Yêu cầu: Với thông tin về các quân bài ban đầu, Tí là người đi đầu, bạn hãy cho biết Tí có khả năng chắc

thắng hay không, nếu có hãy chỉ ra bước đi đầu tiên của Tí

Dữ liệu vào: Tập tin BOCBAI.INP chứa số N là số quân bài trên bàn

Dòng tiếp theo có N số ghi số trên quân bài

Kết quả: xuất ra tập tin BOCBAI.OUT gồm:

• Nếu chắc thắng, dòng đầu tiên ghi số 1, nếu không chắc thắng dòng đầu tiên ghi số 0

• Dòng thứ hai ghi vị trí bốc đầu tiên của quân bài (1 hoặc N)

Ví dụ:

Một số bài toán tham lam luyện thi học sinh giỏi

1. http://laptrinh.ntu.edu.vn/Problem/Details/2201

2. http://laptrinh.ntu.edu.vn/Problem/Details/4

3. http://laptrinh.ntu.edu.vn/Problem/Details/93

8

3 4 6 12 5 7 2 9 18

Bocbai INP Bocbai OUT

7

3 4 6 12 5 7 8 0

Trang 6

5. http://laptrinh.ntu.edu.vn/Problem/Details/134

6. http://vn.spoj.com/problems/NK2MFS/

7. http://vn.spoj.com/problems/NOIXICH/

8. http://vn.spoj.com/problems/CTNEWS/

9. http://vn.spoj.com/problems/CBUYING/

10. http://vn.spoj.com/problems/NUMCON/

11. http://vn.spoj.com/problems/BWPOINTS/

12. http://vn.spoj.com/problems/SBOOST/

13. http://vn.spoj.com/problems/CAR/

14. http://vn.spoj.com/problems/TWO/

15. http://vn.spoj.com/problems/MJOURNEY/

16. http://vn.spoj.com/problems/MCLEAN/

17. http://vn.spoj.com/problems/KSPREE/

18. http://vn.spoj.com/problems/MAJSTOR/

Ngày đăng: 15/02/2016, 10:16

TỪ KHÓA LIÊN QUAN

w