Исправление алгоритма обхода по сеткеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Исправление алгоритма обхода по сетке

Сообщение Anonymous »

Алгоритм обхода по сетке:

Вы находитесь в N-мерной сетке в позиции (x_1,x_2 ,...,x_N). Размеры сетки: (D_1,D_2,...D_N). За один шаг вы можете пройти вперед или назад в любом из N направлений. (Таким образом, всегда существует 2N возможных различных ходов). Сколькими способами вы можете выполнить M шагов, например, не покидая сетки ни в какой точке? Вы покидаете сетку, если используете любой x_i, либо x_i D_i.

Ввод:
Первая строка содержит количество тестовых случаев T. Далее следуют тестовые примеры T. Для каждого тестового примера первая строка содержит N и M, вторая строка содержит x_1,x_2...,x_N, а третья строка содержит D_1,D_2,..., Д_Н.

Код: Выделить всё

public class GridWalking {

/**
* @param args
*/
public static void main(String[] args) {

try {

long arr[] = new long[78];
long pos = 44;
long totake = 287;

/*
* Double arr[] = new Double[3]; Double pos = 0; Double totake = 5;
*/

Double val = calculate(arr, pos, totake);
System.out.println(val % 1000000007);

} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}

}

public static HashMap calculated = new HashMap();

private static Double calculate(long[] arr, long pos, long totake) {

if (calculated.containsKey(pos + "" + totake)) {
return calculated.get(pos + "" + totake);
}
if (0 == totake) {

calculated.put(pos + "" + totake, new Double(1));
return new Double(1);
}

if (pos == arr.length - 1) {

Double b = calculate(arr, pos - 1, totake - 1);

Double ret = b;
calculated.put(pos + "" + totake, new Double(ret));
return ret;

}
if (pos == 0) {
Double b = calculate(arr, pos + 1, totake - 1);

Double ret = b;
calculated.put(pos + "" + totake, new Double(ret));
return ret;
}

Double a = calculate(arr, pos + 1, totake - 1);
Double b = calculate(arr, pos - 1, totake - 1);

Double ret = (a + b);
calculated.put(pos + "" + totake, ret);
return ret;
}

}
Итак, в приведенном выше решении я пытаюсь взять одномерный массив.
На веб-сайте указано, что ответом является 38753340. , но я этого не понимаю.

Подробнее здесь: https://stackoverflow.com/questions/119 ... -algorithm
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»