Có n quả táo với trọng lượng đã biết. Nhiệm vụ của bạn là chia những quả táo thành hai nhóm sao cho chênh lệch trọng lượng giữa hai nhóm là tối thiểu.
Input Dòng đầu tiên là một số nguyên n : số lượng táo. Dòng tiếp theo chứa n số nguyên : trọng lượng của mỗi quả táo.
Output In ra một số nguyên: chênh lệch trọng lượng tối thiểu giữa hai nhóm.
Example
Sample input
5 3 2 7 4 1
Sample output
1
python e cảm ơn ạ
`* Python:`
`" "`
def diviser(p, n):
def ajouter(indi, groupe1, groupe2):
if indi == n:
return abs(groupe1 - groupe2)
recursif1 = ajouter(indi + 1, groupe1 + p[indi], groupe2)
recursif2 = ajouter(indi + 1, groupe1, groupe2 + p[indi])
return min(recursif1, recursif2)
return ajouter(0, 0, 0)
n = int(input())
p = list(map(int, input().split()))
resultat = diviser(p, n)
print(resultat)
________________________________________________
`" "`
- Giả sử cần chia n quả táo vào 2 rổ khác nhau sau cho chênh lệch giữa chúng là nhỏ nhất:
+ Nếu bỏ quả táo đầu tiên vào rổ 1 recursif1. Sau đó sẽ có 2 cách chia với quả táo tiếp theo là bỏ vào rổ 1 hoặc rổ 2. Lặp lại với các quả táo tiếp theo cho đến khi hết số táo
+ Nếu bỏ quả táo đầu tiên vào rổ 2 recursif2. Sau đó sẽ có 2 cách chia với quả táo tiếp theo là bỏ vào rổ 1 hoặc rổ 2. Lặp lại với các quả táo tiếp theo cho đến khi hết số táo
+ Sau khi duyệt qua các lựa chọn cho tất cả các táo. So sánh kết quả giữa 2 lựa chọn, chọn lấy lựa chọn có chênh lệch trọng lượng nhỏ hơn rồi tính ngược lên sẽ được kết quả cuối cùng bài toán.
+ Ảnh minh họa với n = 5 và p = [3, 2, 7, 4, 1]: Link bình luận
`" "`
- Hàm ajourter được triển khai bằng cách sử dụng đệ quy:
+ Kiểm tra xem đã duyệt qua tất cả các phần tử trong danh sách p hay chưa (Dòng 3, 4)
+ Khi duyệt qua hết tất cả các phần tử thì chênh lệch trọng lượng táo nhóm groupe1 và groupe2 sẽ được trả về
+ Ngược lại, thực hiện 2 lần đệ quy, sau đó trả về giá trị nhỏ nhất giữa hai giá trị đệ quy recursif1, recursif2. Quá trình đệ quy thực hiện cho tới khi indi == n
`1.` Thêm phần tử p[indi] vào groupe1 và giữ nguyên groupe2
`2.` Thêm phần tử p[indi] vào groupe2 và giữ nguyên groupe1
`" "`
- return ajouter(0, 0, 0) sử dụng gọi hàm ajouter với ba đối số 0, 0, 0. Có nghĩa:
+ Đệ quy bắt đầu với phần tử đầu tiên của danh sách p
+ groupe1 và groupe2 ban đầu không có phần tử nào với trọng lượng bằng 0
Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!
Lớp 7 - Năm thứ hai ở cấp trung học cơ sở, một chuỗi quay mới lại đến và chúng ta vẫn bước tiếp trên con đường học sinh. Học tập vẫn là nhiệm vụ chính, hãy luôn kiên trì và không ngừng cố gắng!
Copyright © 2021 HOCTAPSGK