У меня такой вопрос для решения проблем:
"Вы решаете пойти в торговый центр, чтобы купить рубашки и / или брюки и / или обувь. В торговом центре есть N разных магазинов. Каждый магазин содержит все эти три предмета, но по разным ценам.
Теперь у вас есть 2 привычки:
- Купите ровно один товар в каждом магазине
- Не покупайте тот же предмет в текущем магазине, если вы уже купили этот предмет в магазине рядом с текущим магазином.
Вы понимаете, что найти деньги сложно, поэтому вы хотите минимизировать общую сумму, которую вы тратите на покупки. «
пример
3 (N магазинов)
1 50 50 (стоимость рубашки, брюк и обуви в магазине 1)
48 50 50 (стоимость рубашки, брюк и обуви в магазине 2)
1 50 50 (стоимость рубашки, брюк и обуви в магазине 3)
минимальная стоимость - 52, где я покупаю рубашку в магазине 1, брюки / обувь в магазине 2 и рубашку в магазине 3.
я не могу купить рубашку в магазине 2, потому что раньше я покупал рубашку в магазине 1.
Моя первая логика состоит в том, чтобы составить все возможные списки, в которых нет одинаковых предметов в соседнем магазине, тогда я буду искать минимальную стоимость ...
Но у меня проблема с ограничением по времени ...
есть какие-нибудь идеи для ее решения?
извините, если мой английский плохой ...
И большое спасибо, если вы, ребята, отвечаете и отвечаете ....
public class Solution {
static ArrayList<ArrayList<Integer>> data;
static int min;
static int sum;
static int n;
static void permutation(int x, int y){
if(x==n-1){
sum+=data.get(x).get(y-1);
if(sum<min)
min = sum;
}
else{
sum+=data.get(x).get(y-1);
if(y==1){
permutation(x+1,2);
permutation(x+1,3);
}
else if(y==2){
permutation(x+1,1);
permutation(x+1,3);
}
else if(y==3){
permutation(x+1,1);
permutation(x+1,2);
}
}
sum-=data.get(x).get(y-1);
}
static int GetMinCost(ArrayList<ArrayList<Integer>> data){
sum = 0;
min = Integer.MAX_VALUE;
permutation(0,1);
permutation(0,2);
permutation(0,3);
return min;
}
static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int t = scanner.nextInt();
for(int i=0; i<t; i++){
n = scanner.nextInt();
data = new ArrayList<>();
for(int j=0; j<n; j++){
ArrayList<Integer> cost = new ArrayList<>();
cost.add(scanner.nextInt());
cost.add(scanner.nextInt());
cost.add(scanner.nextInt());
data.add(cost);
}
System.out.println(GetMinCost(data));
}
}
}