Bài toán mình đang có tóm tắt như thế này:
Giả sử muốn tạo ra một chiếc xe cần có tối thiểu 5 loại linh kiện chính. Mỗi loại linh kiện chia ra làm 2 loại, loại tốt made in japan - đơn giá 1, loại thường made in china - đơn giá 2
Câu hỏi:
Một người có một số tiền nhất định, muốn lắp 1 chiếc xe nên cần mua 5 loại linh kiện. Tính toán xem số tiền của người đó có đủ để mua 5 loại linh kiện với đơn giá 1 hết hay chỉ đủ mua 5 loại với đơn giá 2 hết. Nếu số tiền trong khoảng giữa (dư sức mua hết 5 loại với đơn giá 2 nhưng ko đủ mua 5 loại với đơn giá 1. Tìm một phương án gồm những linh kiện theo đơn giá 1 và linh kiện theo đơn giá 2 để mua.
Giải thuật mình lập ra như sau:
all1 = tổng 5 LK tốt với đơn giá 1
all2 = tổng 5 LK thường với đơn giá 2
money = số tiền người đó có
if (money > all2 && money < all1)
{
//bắt đầu là mua hết 5 loại Linh kiện (LK) thường
int sum = all2;
//xong xét trong 5 loại LK đó có thay đc cái nào thành loại tốt ko
for(int i=1; i<=5;i++)//cần mua 5 LK nên có 5 vòng lặp, bắt đầu từ LK 1
{
if (sum - (LK [i] đơn giá 2) + (LK [i] đơn giá 1) <= money)
{
Sum -= LK[i] đơn giá 2;
Sum += LK[i]đơn giá 1;
//code thêm để biết LK thứ i có thể thay = loại tốt
}
else
continue;//ko break ở đây vì biết đâu với số tiền còn lại ko đủ để thay LK thứ i = loại tốt
nhưng đủ để mua LK thứ i+1 loại tốt.
}
}
Có cảm giác giải thuật này vẫn chưa tốt lắm. Ai có giải thuật nào tốt hơn xin thỉnh giáo.