Привет всем! Решаю вот эту вот задачу ссылка Придумал только вот какое решение. Считаем dp[i]-максимальная выручка за за первые i дней. Переход dp[i]=max(0<=j<=i: dp[j]+c[i]*(pref[i]-pref[j])), то есть перебираем когда в последний раз нам выгодно рубить дерево и выбираем оптимальный. Здесь pref[k]-на сколько вырастет бамбук за первые k дней. Но, это О(n^2). Как решить эту задачу за O(n)?
Жадность. Если нет j > i такого, что c[j] > c[i], то выгодно срезать весь бамбук и продать. Проверять наличие такого j можно, предподсчитав максимумы на суффиксах за O(n). http://pastebin.com/Wjeq4Bgg
спасибо... вообще как можно отличить в каких задачах жадность, а в каких динамика?
Если был бы какой-то алгоритм, хорошие программисты ценились бы куда меньше.
Нужно просто решать много задач и учиться находить такие идеи.