Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Daniyar91

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
..., и еще очень много умных слов, я слышал.
 
А если серьезно то все гораздо проще.
 
расмотрим такую таблицу:
 
1: 8 2 1 2 3  
2: 1 2 6 2 4  
3: 2 7 2 3 4  
4: 1 3 2 4 4  
5: 1 3 4 3 1  
 
наша задача, выявить в каждом столбще самую "ценную" ячейку, потому как в каждом столбце, мы можем взять только одно значение. Ясно что в первом столбще, такая ячейка находится в первой строке (8 -- имеет самое большее значение из всех строк, и стоит один ход), также ясно что пятое значение (1) менее ценно четвертого (1), ведь их значения одинаковы, а стоят они разное кол-во ходов. Также видно что четвертая ячейка менее ценна второй.
 
из этого делаем вывод, что возможно можно как-то расчитать стоимость кажной ячейки в столбце.
 
расмотрим такую таблицу:
 
1 1 1
2 2 2  
3 3 3
 
какие бы ячейки мы не взяли, так и так, мы не наберем в сумме число отличное от 3. делаем вывод, что ценность ячейки прямопропорцеонально ее значению, и обратнопропорцеонально индексу строки (стоимости ходов за нее).
 
возвращаемся к первой тблице и расчитываем ценность каждой ячейки
1:   8-1= 7   2-1= 1   1-1= 0   2-1= 1   3-1= 2
2:   1-2=-1   2-2= 0   6-2= 4   2-2= 0   4-2= 2
3:   2-3=-1   7-3= 4   2-3=-1   3-3= 0   4-3= 1
4:   1-4=-3   3-4=-1   2-4=-2   4-4= 0   4-4= 0
5:   1-5=-4   3-5=-2   4-5=-1   3-5=-2   1-5=-4
 
т.е. получилось вот так:
1:   7  1  0  1  2
2:  -1  0  4  0  2
3:  -1  4 -1  0  1
4:  -3 -1 -2  0  0
5:  -4 -2 -1 -2 -4
 
теперь берем самые ценные ячеки -- 7(1:1), потратили один ход, значит осталось еще четыре хода. видим что следующая по цене это ячейка 4(2:3) и 4(3:2), естетсвеноо берем ту за которую тратим меньше ходов - (3:2), потратили еще два хода, осталось еще два. следующая ячейка это та которую мы не взяли на предыдущем ходе 4(2:3), но на нее надо 3 хода, а у нас всего 2, а значит мы не должны искать в тех строках куда нехватает ходов, а значит теперь смотрим только на две первые строки, и видим ячейки 2(5:1) и 2(5:2) понятно что берем (5:1), остался один ход, значит смотрим только в первой строке, а это либо 1(2:1) либо 1(4:1), возьмем допустим 1(2:1). все, ходы кончились, мы выбрали следующие ячейки: (1:1), (3:2), (5:1), (2:1), смотрим в первую таблицу, и по-этим тндексам находятся следующие значения 8, 6, 3, 2. в сумме 19.
 
P.S. я до этого долго шел. т.е. тоже всякие там рекурсии хотел использовать, но до написания кода, дело так и не дошло, потому-что времени свободного очень мало.
 
P.P.S. Возможно это не работает, нодо проверять, но мне лень.

Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 13:35 19-09-2015 | Исправлено: Daniyar91, 18:25 19-09-2015
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru