1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| DarkWishmaster |
4.07.2011 19:40
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 168 Пол: Мужской Репутация: 3 |
Привет. Вот интересная задача:
Дана матрица NxM где её элементы положитнльные и отрицательные числа. Можно умножить сколько раз угодно любую линию и любой столбик на -1. Найдите максимальную суму чисел из матрицы которая может получиться путем этих умножений. Например: 5 3 4 -2 2 3 -1 5 2 0 -3 4 1 -3 5 -3 2 Умножаем 3 линию и 2 столбик. Сума=28. Есть идеи как это вообще сделать? Сначала я думал что можно пройтись по линиям и столбикам и если по модулю сума отрицательных чисел больше положительных то умножаем на -1, но такой способ не помогает так как когда мы умножаем линию то изменются и колоны и наоборот. |
![]() ![]() |
| Krjuger |
5.07.2011 0:24
Сообщение
#2
|
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Самый простой вариант сделать полный перебор)))Но производительность будет аховая....
Насамом деле я думаю,если внести в твою идею некоторые корректировки,то что то путное выйдет.Смотри у тебя есть 2 варианта,либо ты умножаеш строку либо столбец.Как варант,ты находиш максимальную сууму в строке,Если надо изменить всю строку,то ты меняеш и ничего не делаеш со столбцами,если чтобы достигнуть максимума тебе в строке надо изменить 1 или 2 элемента(я отталкиваюсь от твоей матрици),то ты совершаеш эти действия для подматрицы без первой строки и дальше смотриш,если разница сумм исходной и измененной подматриц больше нуля,то ты применяеш изменения для исходной матрици,если меньше нуля,то сравниваеш это число и тем,на сколько больше нам удалось получить от изменени в первой строке,если все таки первая строка нам позволит увеличить сумму то применяеш,если нет,то отменяеш изменения и переходиш на 2 строку и все аналогично. Больше пока что ничего в голову не лезет.Задача явно переборная и надо максимально сократить этот перебор.У моего варианта достаточно много минусов,постараюсь придумать вариант получше. |
DarkWishmaster Flip 4.07.2011 19:40
sheka Можно выбрать только одну строку и одинстолбец? 4.07.2011 19:54
DarkWishmaster
Можно выбрать только одну строку и одинстолбец?
... 4.07.2011 22:11
Lapp Самый простой вариант сделать полный перебор)))Но ... 5.07.2011 1:52
Unconnected Перебирать тут наверное оочень долго можно.. может... 5.07.2011 1:56
Lapp DarkWishmaster, ограничения на размеры матрицы нак... 5.07.2011 8:49
DarkWishmaster
DarkWishmaster, ограничения на размеры матрицы на... 5.07.2011 11:39
IUnknown По всем вариантам от 0 до (2N - 1) и от 0 до (2M -... 5.07.2011 9:03
IUnknown В таком случае подобный моему метод решения вполне... 5.07.2011 12:16
DarkWishmaster IUnknown,
Надеюсь я понял:
первые два цикла переби... 5.07.2011 12:40
TarasBer Я тут подумал немного.
1. Если разешить переворач... 5.07.2011 12:57
DarkWishmaster IUknown,
Вообщем твое решение дает 20 баллов из 10... 5.07.2011 13:31
TarasBer Опа, стобальное решение как моё.
> Эту строку ... 5.07.2011 13:45
IUnknown Вот и спрашивай у автора этого решения. Я в чужом ... 5.07.2011 13:49
TarasBer Если бы в онлайн-тестах хотя бы примерно указывало... 5.07.2011 13:54
Unconnected
С другой стороны, учит находить острые углы в код... 5.07.2011 14:02
TarasBer > С другой стороны, учит находить острые углы в... 5.07.2011 14:05![]() ![]() |
|
Текстовая версия | 9.12.2025 19:35 |