Головна Обговорення Лінки Пошук Prykladna СС Прикладна _КОЛЕДЖ 29.07.2026 01:14:12 (EEST=GMT+2)
ACM -
Навігація -
Теми форуму +
Чи знали ви, що... ? (beta) -
Всього лише одна крапля нафти робить непридатним для пиття 25 літрів води.
Події
ПнВтСрЧтПтСбНд
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Birthday(s):
AVATARLinn646
AVATARskela

Перегляд теми
ACM Контестер | Online Judge System | acm.timus.ru
Автор Задача 1635
ZuTa
Користувач

Повідомлень: 43
Звідки: school
Зареєстрований: 29.12.07
Опубліковано 31-10-2008 14:39
Всім привіт...
Ось "зустрівся" на тімусі з задачею 1635, яка мене вже...
Хотілось б її тут розібрати (звісно якшо ніхто не проти!)

І так, я написав динаміку - при найгіршому тесті О(N^3).
Зрощуміло, що по часу не пройде в ніякі ворота :)

Потім я трохи оптимізував прогу, але все рівно при найгіршому тесті О(N^3) :(

Опишу свою динаміку
Нехай a[i,j] - мінімальна кількість паліндромів на яку можна розбити рядок від i-го до j-го символа
Тоді, зрозуміло:
1. Якщо i>j то a[i,j]=0
2. a[i,j]=1 - якщо рядок (від i до j) паліндром
3. a[i,j]=мінімальному числу з (a[i,p]+a[p+1,j]) де p = i..(j-1)

Ось і все!
Зробив я оптимізацію для пошуку паліндрома(перевіряю за О(1)) і...все!

Таким чином я отримую ТЛЕ 32

Я вважаю, що потрібно якось оптимізувати цю динаміку, але на жаль поки що не знаю як саме...Або ж я помиляюся і тут зовсім інший розв"язок...

Будь ласка покажіть на помилку ?
Чи на правильному я шляху ? :)


Running...Accepted
Змінив(ла) ZuTa, 31-10-2008 14:41
ZuTa 412584015 ZuTa http://www.mitsubishigara.info/ Надіслати приватне повідомлення
Автор RE: Задача 1635
Oracle
Користувач

Повідомлень: 75
Звідки: LNU FAMI-13
Зареєстрований: 20.02.07
Опубліковано 31-10-2008 16:00
Ти на правильному шляху, тільки додай мінімальну оптимізацію: a[i,j]=min(a[i,j-k]+1), для всіх k, при яких підстрічка з j-k-о по j-ий символ є паліндромом. (Принаймні я так рішав, думаю є і кращі розвязки).
_Oracle 492-581-744 Oracle[Lviv NU] Надіслати приватне повідомлення
Автор RE: Задача 1635
ZuTa
Користувач

Повідомлень: 43
Звідки: school
Зареєстрований: 29.12.07
Опубліковано 31-10-2008 16:40
Oracle
вже "дійшов" до цього....
але чомусь всерівно глючить :( ТЛЕ...
при найгіршому тесті О(N^3) (грубо кажучи)

чи я шось "глючу"?!


Running...Accepted
ZuTa 412584015 ZuTa http://www.mitsubishigara.info/ Надіслати приватне повідомлення
Автор RE: Задача 1635
Oracle
Користувач

Повідомлень: 75
Звідки: LNU FAMI-13
Зареєстрований: 20.02.07
Опубліковано 31-10-2008 17:16
Ну ше треба помітити, що тобі абсолютно не потрібно тримати двовимірний масив для результатів. Тобто: ти маєш один масив двовимірний, a[i,j] - який означає чи підстрічка з i до j є паліндромом чи ні. А інший масив - одновимірний - буде тримати таку інформацію: res[i] - результат для підстрічки з 1-о по i-ий символ. Тоді складність буде O(n^2), для формування першого масиву і O(n^2) для формування другого масиву. Отже отримали алгоритм який за квадрат рішає задачу.
_Oracle 492-581-744 Oracle[Lviv NU] Надіслати приватне повідомлення
Автор RE: Задача 1635
ZuTa
Користувач

Повідомлень: 43
Звідки: school
Зареєстрований: 29.12.07
Опубліковано 31-10-2008 19:39
і як я до такого не додумався?! :o
Велике спасибі, Oracle

Дуже доступно описав...молодець ;)




Running...Accepted
ZuTa 412584015 ZuTa http://www.mitsubishigara.info/ Надіслати приватне повідомлення
Перейти на форум:
Голосування
Що Ви б хотіли отримати в якості подарунку на змаганні з програмування?

Медалі

настільні ігри

торт

клавіатура, навушники, флешки і т.д.

квитки в кіно

квитки в аквапарк

квитки на пейнтбол

книги

футболки з логотипом змагання

Для участі в голосуваннях Ви повинні залогуватись.
Міні-чат +
Зараз на сайті -
Гостей: 1
На сайті немає зареєстрованних користувачів

Користувачів: 5,103
новачок: NataEvgten
Powered by PHP-Fusion © 2003-2006
LNU ACMania © 2004-2011 e-mail: webmaster@acm.lviv.ua
26,049,257 унікальних відвідувачів
Our projects: ACM Contester, _College.