import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MaxPurchaseAmount {
public static void main(String[] args) {
// Danh sách các sản phẩm và giá tiền của chúng trong kho 1 và kho 2
Map<String, Integer> kho1 = new HashMap<>();
kho1.put("Sản phẩm A", 50);
kho1.put("Sản phẩm B", 30);
kho1.put("Sản phẩm C", 20);
Map<String, Integer> kho2 = new HashMap<>();
kho2.put("Sản phẩm X", 40);
kho2.put("Sản phẩm Y", 25);
kho2.put("Sản phẩm Z", 15);
// Số tiền có sẵn để mua hàng
int soTienCoSan = 100;
// Tính số tiền tối đa có thể mua được các sản phẩm
int maxSoTienMuaDuoc = getMaxPurchaseAmount(kho1, kho2, soTienCoSan);
System.out.println("Số tiền tối đa có thể mua được: " + maxSoTienMuaDuoc);
}
public static int getMaxPurchaseAmount(Map<String, Integer> kho1, Map<String, Integer> kho2, int soTienCoSan) {
int maxSoTienMuaDuoc = 0;
// Tạo danh sách các sản phẩm từ cả hai kho
List<String> tatCaSanPham = new ArrayList<>();
tatCaSanPham.addAll(kho1.keySet());
tatCaSanPham.addAll(kho2.keySet());
// Duyệt qua tất cả các tổ hợp sản phẩm có thể mua
for (int i = 0; i < (1 << tatCaSanPham.size()); i++) {
int tongGiaTien = 0;
for (int j = 0; j < tatCaSanPham.size(); j++) {
if ((i & (1 << j)) > 0) {
// Sản phẩm được chọn
String sanPham = tatCaSanPham.get(j);
int giaTienKho1 = kho1.getOrDefault(sanPham, 0);
int giaTienKho2 = kho2.getOrDefault(sanPham, 0);
// Chọn giá tốt nhất từ cả hai kho
int giaTien = Math.min(giaTienKho1, giaTienKho2);
tongGiaTien += giaTien;
}
}
// Kiểm tra xem có mua được nhiều hơn không
if (tongGiaTien <= soTienCoSan && tongGiaTien > maxSoTienMuaDuoc) {
maxSoTienMuaDuoc = tongGiaTien;
}
}
return maxSoTienMuaDuoc;
}
}