Привет.
В весеннем семестре я вёл в СПбГУ спецсеминар под названием «Динамическое программирование». Чтобы получить зачёт, участники решали много тренировочных задач, а ещё — готовили свою собственную задачу в Полигоне.
Для большинства участников это была первая подготовленная задача. Тем не менее, получилось довольно мило. Пару задач дали на локальные олимпиады. А из остальных я собрал две тренировки и выложил на Codeforces. Тренировки поставлены на следующее время:
- первая — Динамическое программирование, СПбГУ 2024, тренировка 1, старт в 06.07.2024 11:30 (Московское время), на 3 часа (условия, результаты, разбор)
- вторая — Динамическое программирование, СПбГУ 2024, тренировка 2, старт в 07.07.2024 11:30 (Московское время), на 3 часа (условия, результаты, разбор)
В каждой тренировке есть и простые, и сложные задачи. Большинство задач — учебные. Думаю, оранжевым и ниже — задач хватит на всю тренировку. Задачи идут в случайном порядке.
Успехов!
Обновление 1: после второй тренировки будет выложен краткий текстовый разбор. К первой тренировке разбор пока не готов, но тоже когда-нибудь будет.
Обновление 2: спасибо авторам задач!
- Марат Аграновский
- Павел Балай
- Николай Березиков
- Тимур Гараев (the_timur)
- Александра Дурнева
- Иван Казменко (Gassa)
- Игорь Киселёв
- Мария Козловцева
- Софья Копейкина (30SK5)
- Игорь Коркин
- Антон Кузнец (Astronomax)
- Максим Мильшин
- Даниил Павленко
- Сергей Петров (psn2706)
- Макар Селиванов (mselivanov)
- Александр Тульчинский (TulchinskijA)
- Илья Тюряев
- Алёна Черепанова (Monic)
Обновление 3: готов разбор первой тренировки.
Is the contest open to everyone?
If yes Contest Link is not working. May be uploading an invitation link or group link will work.
Looks like the links start working when the gym starts.
Still, there is no option to submit as I haven't registered for the contest. (┬┬﹏┬┬)
But you can register now, right?..
Sorry, I am setting a public gym for the first time. Not used to all the quirks.
Как раз хотел сегодня порешать дп. Спасибки.
What is the estimated rating for the problems ? or they're just educational problems ?
Будет разбор потом?
Суть дп в использовании очередности вычислений и запоминании результатов. Как введение,
105239B - Соберём портфель вместе
Букварное решение — завести map dp[revenue]=expense, сколько expense нужно минимально вложить чтобы заработать revenue. Изначально, dp[0] = 0 ничего не запускаем, ничего не зарабатываем.
Когда начинаем читать проект, создаем клон dp — before, что было до этого проекта. Для каждого способа (r,e) из входных данных, перебираем все (revenue, expense) из before и если expense + e <= b, то записываем в dp[revenue+r] = min(dp[revenue+r], expense+e).
Но ограничения задачи позволяют обойтись без map'а, просто сваливать все возможные сочетания (revenue+r,expense+e) в массив и в конце взять максимум: 269160487
Can anyone help what is wrong with my submission here for Problem G of Day-2, it gives WA on tc-3?
In H it's pretty obvious how to write the code, but when to logically decide when vasya wins or peter?
The tutorial is now available (see links in the post and in the gym).
271027559 Hey can any one check the issue in my code. I think it aligns with the intended solution but WAs on test case 5. Since the cases aren't visible I'm not exactly sure of the issue. Can one of the authors/managers please clarify?
Edit: Never mind got it. I was having a take not take style rec which was causing WA.Just removing that and iterating over the array fixed it
Consider this line:
ll res = max(1LL, rec(pos + 1, N, diff, ok));
This assumes we can just skip an element of the array, and move on. In doing so, however, we lose the information about the previous element taken.
Consider a simple test to demonstrate the problem:
The answer is surprisingly 9. Actually however, there are two disconnected paths of length 5 each:
1 2 3 4 5
and11 12 13 14 15
. Instead of considering each path separately, the solution just skips one of the middle elements, and pretends they are connected.Thanks for looking into my submission. So I just removed the skip case and iterated over the whole array to find max length. That made it AC.
I'll just post my AC code for anyone who might be facing a similar type WA.
I was solving problem I. Path and K Vertices. My solution is pretty much same as the editorial. I am maintaining two sets for finding k larger elements while using dfs. But this gives me wrong answer. can somebody tell me what is wrong in my solution.
The solution seems to assume root is the first vertex. This need not be true.
Thanks for the help.
I should have read the problem more carefully.