Всем привет! Помогите решить задачу. Есть територия n*m(матрица). Есть размер дома a*b. На некоторых клетках територии ростут деревья, поэтому на них нельзя строить деревья. Нужно посчитать количество способов построить дом. Ссылка
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3831 |
3 | Radewoosh | 3646 |
4 | jqdai0815 | 3620 |
4 | Benq | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | gamegame | 3386 |
10 | ksun48 | 3373 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 164 |
1 | maomao90 | 164 |
3 | Um_nik | 163 |
4 | atcoder_official | 160 |
5 | -is-this-fft- | 158 |
6 | awoo | 157 |
7 | adamant | 156 |
8 | TheScrasse | 154 |
8 | nor | 154 |
10 | Dominater069 | 153 |
Всем привет! Помогите решить задачу. Есть територия n*m(матрица). Есть размер дома a*b. На некоторых клетках територии ростут деревья, поэтому на них нельзя строить деревья. Нужно посчитать количество способов построить дом. Ссылка
Название |
---|
Тут нужно уметь брать сумму на прямоугольнике. Дома = 1, пусто = 0. потом бежишь цикликом по всем возможным правым нижним ушлам твоего будущего дома и смотришь какая сумма на прямоугольнике, которую н покрывает. Если 0, то дом можно строить, иначе нельзя.
Осталось научиться брать сумму на прямоугольнике. Эта задачка подобна следующей задачке: находить сумму на отрезках массива. Тут нужно пользоваться частичными суммами.
Спасибо! Я понял.
Main idea is to check does __i, j position can be down right corner, which means that you have height __i with no trees and width __j with no trees. Whole dp point is saving how much trees you have above and how much trees you have left from current position. Obviously that can not guarantee if there is tree on diagonal, so you need to do aditional checks.
it's pretty easy — for each cell check whether it can be top left corner of AxB rect. or not. It can be done in linear time — firsly, count prefix sums A, such that S[i][j] = number of tress in rect. (1, 1) _ (i, j) (count this using some ez dp ideas) . Now u can count number of tress in any rect. using simple math. with S. So, for each cell(i, j) check whether there are no tress in rect (i, j) _ (i + a — 1, j + b — 1). Inglesh is dead, sorry for that