Я готовлюсь к соревнованию (отсюда мой предыдущий вопрос ).
Я разобрался с алгоритмом для вопроса, но у меня возникли некоторые проблемы с самим программированием. Это сольный конкурс, поэтому мне нужно разобраться в этом, прежде чем я пойду на это. Это вопрос.
ЗАДАЧА 3: GECKO В сезон дождей,
одна из стен в доме
заражены комарами. Стена
покрыты квадратными плитками h × w, где
есть h рядов плиток сверху
дно, а ш столбцы плиток из
слева направо. Каждая плитка имеет от 1 до 1000
комары отдыхают на нем. Геккон
хочет съесть столько комаров, сколько
возможно при условии следующего
ограничения. Начинается с выбора
любая плитка в верхнем ряду, и ест
комары в этой плитке. Затем это
переходит на плитку в следующем нижнем ряду,
ест комаров на плитке, и
так до тех пор, пока он не достигнет пола. когда
он перемещается из одной плитки в плитку в
следующий нижний ряд, он может только двигаться
вертикально вниз или по диагонали к
влево или вправо (см. рисунок 1). Дано
значения h и w, а также числа
комаров, лежащих на каждой плитке,
написать программу для расчета максимума
возможное количество комаров
Геккон может съесть за одну поездку
сверху до нижней части стены.
Пример входного файла:
Пример
6 5
3 1 7 4 2
2 1 3 1 1
1 2 1 1 8
2 2 1 5 3
2 1 4 4 4
5 7 2 5 1
Проблема, с которой я столкнулся, заключается в чтении чисел (или в верхней части списка проблем).
Мой текущий код для чтения в:
ifstream read;
read.open("input.txt");
write.open("output.txt");
int width, height, wall[500][500];
read >> height;
read >> width;
for ( int count1 = 0; count1 < height; count1++)
{
for ( int count2 = 0; count2 < width; count2++)
{
read >> wall[count1][count2];
}
}
Когда я проверил это с cout
, чтобы напечатать все прочитанные числа, все, что я получил, было бредом.
Прямо сейчас я не могу обнаружить ошибки с этим, кто-нибудь может увидеть проблему? Благодарю.
(исправлено) Еще раз спасибо.
Я проверил прочитанное, и теперь оно идеально. Тем не менее, количество мух, которые я получаю, все еще не определено. Например, ввод
1 1
23
Должен дать вывод 23, но я получаю 0 в качестве вывода.
Вот мой код:
int h = 0, w = 0, compare1, compare2, compare3, currentInt;
for ( int count3=( height-2 ); count3 >= 0; count3--)
{
for( int count4 = 0; count4 < width; count4++)
{
h = count3;
w = count4;
currentInt = wall[h][w]; // read in affected integers.
if( w != 0 )
{ compare1 = wall[h+1][w-1];
}
compare2 = wall[h+1][w];
compare3 = wall[h+1][w+1];
if( w!= 0) // Compare and replace.
{
if((( currentInt + compare1) >=(currentInt + compare2)) && ((currentInt + compare1)>=(currentInt + compare3)))
{
wall[h][w] = ( currentInt+compare1);
}
if((( currentInt + compare2) >(currentInt + compare1)) && ((currentInt + compare2)>(currentInt + compare3)))
{
wall[h][w] = ( currentInt+compare2);
}
if((( currentInt + compare3) >=(currentInt + compare2)) && ((currentInt + compare1)>(currentInt + compare1)))
{
wall[h][w] = ( currentInt + compare3);
}
}
else
{
if ((currentInt + compare2) >= ( currentInt + compare3))
{
wall[h][w] = ( currentInt + compare2);
}
else
{
wall[h][w] = ( currentInt + compare3);
}
}
}
}
int maxFlies=0;
for (int count5 = 1; count5 < width;count5++)
{
maxFlies = wall[0][0] ;
if ( maxFlies < wall[0][count5])
{ maxFlies = wall[0][count5] ; }
}
write<<maxFlies<<endl;
read.close();
write.close();
return 0;
То, что я пытаюсь сделать с этим, в основном: Читайте со второй последней строки. Добавьте это с единственными блоками, которых это может достигнуть ниже. Затем переместитесь вверх и, наконец, проверьте, какая из верхних строк является наибольшим целым числом. Спасибо за быстрые ответы.