category-wise-problems

contains category wise problems(data structures, competitive) of popular platforms.

View the Project on GitHub mayankdutta/category-wise-problems

Atcoder DP Series

  1. Vacation, Medium
    • based on coin change problems, just a modified version
    • States are (index and sub_index (0/1/2 ))
    • Approach
      • We know that each time we have to choose previous elment but not of same index, we are at.
        • like if we at index = 2, subIndex = 0 then we can pick index = 1, subIndex = 1/2
        • Or i should say dp[2][0] = max(dp[2 - 1][1], dp[2 - 1][2]); kind of.
      • Since we able to look though the reccurrence relation, we just now have to implement this.
      • Exact Relation is dp[2][0] = max(dp[2 - 1][1] + arr[2 - 1], dp[2 - 1][2] + arr[2 - 1]
      • You should try to figure out implementation.
      sample implementation ```cpp int n; cin >> n; std ::vector<std ::vector> arr(n, vi(3)); for (int i = 0; i < n; i++) for (int j = 0; j < 3; j++) cin >> arr[i][j]; std ::vector<std ::vector> dp(n + 1, vi(3, 0)); for (int i = 0; i <= n; i++) { for (int j = 0; j < 3; j++) { if (i == 0) { dp[i][j] = 0; } else { dp[i][j] = max(dp[i - 1][(j + 1) % 3] + arr[i - 1][j], dp[i - 1][(j + 2) % 3] + arr[i - 1][j]); } } cout << max(dp[n][0], max(dp[n][1], dp[n][2])) << '\n'; ``` </details>
  2. G - Longest Path