我得到这样的问题解决问题:
“你决定去商场买衬衫和/或裤子和/或鞋子。在商场里有 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));
}
}
}
凤凰求蛊
蛊毒传说
相关分类