Có hàm nào có thể hoán vị theo cặp như bài này không?

Hoài Linh Tinh và Chí Tài Tình dự định tiếp tục xây dựng một ngôi trường cho trẻ em nghèo. Thời gian tựu trường đang tới gần nên họ đang phải tìm cách thi công công trình một cách nhanh nhất.

Công việc yêu cầu các nhân công phải làm việc theo cặp. Do các công nhân có tốc độ làm việc không giống nhau nên khi ghép cặp hai công nhân có tốc độ làm việc lần lượt là a và b (a < b) (đơn vị tốc độ làm việc), cặp đôi đó sẽ làm việc theo tốc độ là a (làm việc theo tốc độ của công nhân có tốc độ chậm hơn).

Bạn được 2 danh hài nhờ giải quyết bài toán ghép cặp công nhân sao cho đạt được tốc độ làm việc tối ưu nhất. 2 danh hài sẽ cung cấp cho bạn danh sách tốc độ làm việc của các công nhân trong công trường, tốc độ làm việc của các công nhân được lưu dưới dạng số nguyên dương, biết rằng số lượng công nhân trong công trường là số chẵn.

Chương trình dưới đây đã nhập giúp bạn dữ liệu vào 1 mảng số nguyên chứa tốc độ làm việc của các công nhân và biến n chứa số lượng cặp công nhân trong công trường.

Hãy viết chương trình xuất ra màn hình tổng tốc độ làm việc tối đa có thể đạt được của các cặp công nhân trong công trường.

Ví dụ:
n = 2
speed = [13, 50, 14, 1]

Giả sử ta thử ghép các cặp công nhân: 13 với 50,  14 với 1
cặp 13 và 50 sẽ có tốc độ làm việc là 13
cặp 14 và 1 sẽ có tốc độ làm việc là 1
Vậy tổng tốc độ làm việc của các cặp là: 13 + 1 = 14

Bây giờ ta ghép theo 1 cách tối ưu nhất: 13 với 1, 50 với 14
cặp 13 và 1 sẽ có tốc độ làm việc là 1
cặp 50 và 14 sẽ có tốc độ làm việc là 14
Vậy tổng tốc độ làm việc của các cặp là: 1 + 14 = 15

Ta thấy cách ghép thứ 2 cho kết quả tốt nhất.
Vậy kết quả cần xuất ra màn hình:
15 

sort lại mảng, rồi ghép (1 vs 2), (3-4), (5-6) … (n-1 vs n)

1 Like

anh có thể nói rõ hơn giúp em sort lại mảng là thế nào không ạ

Tức là xếp giảm dần.

Không thể có cách chọn nào lấy được hơn thứ 2 + thứ 4 + thứ 6 + … + thứ 2n vì đơn giản là không đủ phần tử lớn hơn để bắt cặp.

n là số cặp mà bạn.

2 Likes

là bạn sắp xếp lại mảng theo thứ tự tăng dần hoặc giảm dần năng suất làm việc.
Người giỏi nhất và người giỏi nhì ghép thành 1 cặp, người giỏi thứ 3 với thứ 4 thành 1 cặp. cứ ghép như vậy cho đến hết. (việc ghép là giải thích cách bạn chọn thôi)
Chứ bài này ví dụ có A là mảng lưu giá trị năng suất làm việc của toàn bộ công nhân (đã sắp xếp theo thứ tự tăng dần)
=> return (A[0] + A[2] + A[4] + …)
Nếu A là mảng giảm thì => return (A[1] + A[3] + A[5] + …)

uk, tôi k đọc kỹ, ý là 2 người cuối cùng đó (giỏi nhất vs người giỏi nhì)

em giải xong rồi cảm ơn mọi người

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?