classSolution{ publicintshoppingOffers(List<Integer> price, List<List<Integer>> special, List<Integer> needs){ int min = 0; for (int i = 0;i < needs.size();i++){ min += price.get(i) * needs.get(i); } int sum = 0; boolean canUseGift; //遍历每个礼包方案 for (List<Integer> list : special){ sum = 0; //判断能否使用礼包 canUseGift = true; for (int i = 0;i < needs.size();i++){ if (list.get(i) > needs.get(i)){ canUseGift = false; break; } } //使用礼包 if (canUseGift){ for (int i = 0;i < needs.size();i++){ needs.set(i, needs.get(i) - list.get(i)); } sum += list.get(list.size() - 1); sum += shoppingOffers(price, special, needs); min = min > sum ? sum : min; for (int i = 0;i < needs.size();i++){ needs.set(i, needs.get(i) + list.get(i)); } } } for (int i = 0;i < needs.size();i++){ sum += price.get(i) * needs.get(i); } min = min > sum ? sum : min; return min; } }