Блог пользователя night.watchman

Автор night.watchman, история, 17 месяцев назад, По-английски

Problem

Can this problem be solved by creating a Graph and then applying DFS??

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
17 месяцев назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Yes, of course. Build graph with edges i -> a[i] + i. But you also need to cache results of dfs.

#define int long long
map<int, int> mp;
int dfs(int v)
{
    if (v >= n) return 0;
    if (mp.find(v) != mp.end()) return mp[v];
    int res = 0;
    for (int u: g[v]) res = max(res, a[i] + dfs(u));
    return mp[v] = res;
}