fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long solve(int n, int k, vector<int> &W, vector<int> &L, vector<int> &S) {
  5. const long long INF = 1e18;
  6. // dp[j] current station tak kam khatam, aur jo handler free baitha hai wo j station pe hai.
  7. vector<long long> dp(n + 1, INF);
  8.  
  9. // base case phela station pe kaam shuru hoga
  10. dp[0] = L[W[0]-1];
  11.  
  12. for(int i = 1; i < n; i++) {
  13. long long nxt = INF;
  14. int curr = W[i]-1;
  15. int prev = W[i-1]-1;
  16.  
  17. long long temp = (curr == prev) ? S[curr] : L[curr];
  18.  
  19. for(int j = 0; j < i; j++) {
  20. if (dp[j] == INF) continue;
  21.  
  22. //case 2
  23. int old = (j == 0) ? -1 : W[j-1]-1;
  24. long long other = (old == curr) ? S[curr] : L[curr];
  25.  
  26. nxt = min(nxt, dp[j] + other);
  27.  
  28. //case 1
  29. dp[j] += temp;
  30. }
  31. dp[i] = nxt;
  32. }
  33.  
  34. return *min_element(dp.begin(), dp.begin() + n);
  35. }
  36.  
  37. int main() {
  38. int n = 3, k = 2;
  39. vector<int> W = {1, 2, 2}, L = {4, 5}, S = {2, 3};
  40. cout << "Min Time: " << solve(n, k, W, L, S) << endl;
  41. return 0;
  42. }
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
Min Time: 12