Я работаю над этой проблемой https://open.kattis.com/problems/walrusweights. Я видел, что кто-то спрашивал об этом здесь, но мой подход к этой проблеме совершенно другой.Walrus Weights/Получение комбинации в массиве, чья сумма ближайшая 1000
В этой проблеме вы должны найти комбинацию в массиве, размер которой близок к 1000. Вот мое решение, оно работает хорошо по времени (0.26 с, ограничение равно 2 с), однако, после 31 тестового примера, это дает мне неправильный ответ.
В моей программе, я сначала прочитал все номера и сделать его до размера массива п + 1 (с нулем в качестве первого номера, я объясню чуть позже), а затем я называю этот метод:
public static void combination(int index, boolean use, int currentSum, int closest){
HS.add(currentSum);
HS.add(closest);
if(index == size){
return;
}
if(use)
currentSum += array[index];
index++;
if(currentSum == 0){ //would interfere with the if statement below, if it's 0, it will always be closer to 1000
combination(index, true, currentSum, closest);
combination(index, false, currentSum, closest);
}
else{
if(Math.abs(1000 - currentSum) < Math.abs(1000 - closest)){//so, if the currentSum is closer to 1000 than the closest so far
closest = currentSum; //this is now the closest one
}
else //otherwise, there's no point going on with further changes to this combination, it will never be closest
return;
combination(index, true, currentSum, closest);
combination(index, false, currentSum, closest);
}
}
с:
combination(0, nums, false, 0, 1000001); //limit of weights is 1000000
в методе комбинации, параметры индекс вы находитесь в данный момент, массив, будете ли вы добавлять текущую запись на сумму, текущую сумму, и самая высокая комбинация, ближайшая к 1000 до сих пор.
Я сделал способ, что после того, как все комбинации будут выполнены, он получит ближайший к 1000, но я уверен, что это работает, и это довольно просто, поэтому не стоит показывать, если это необходимо.
Может ли кто-нибудь сказать мне, что я делаю неправильно? Неправильная логика комбинационного метода, или есть дополнительная проверка или что-то вроде того, что мне не хватает?
Что вы хотите сказать? – rsjaffe
Ой, мой плохой, только что отредактировал. Сожалею. – Danny0317