Advertisement
a53

Himalaya

a53
Jul 6th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define Nmax 505
  4. #define inf 1000000000
  5.  
  6. using namespace std;
  7.  
  8. ifstream fin("himalaya.in");
  9. ofstream fout("himalaya.out");
  10.  
  11. int N, K, C1, C2;
  12. int H[Nmax];
  13. int dp[Nmax][Nmax], T[Nmax][Nmax];
  14. int sol[Nmax];
  15.  
  16. int getCost(int k, int j, int i)
  17. {
  18. if(j == 0)
  19. return 0;
  20. if(H[j] <= H[i])
  21. return dp[k][j] + (H[i] - H[j]) * C1;
  22. else
  23. return dp[k][j] + (H[j] - H[i]) * C2;
  24. }
  25.  
  26. int main()
  27. {
  28. fin >> N >> K >> C1 >> C2;
  29. for(int i = 1; i <= N; i++)
  30. fin >> H[i];
  31. for(int i = 1; i <= K; i++)
  32. for(int j = 1; j <= N; j++)
  33. dp[i][j] = -inf;
  34. dp[1][1] = 0;
  35. for(int k = 2; k <= K; k++)
  36. for(int i = k; i <= N; i++)
  37. {
  38. int idx = k - 1;
  39. for(int j = k - 1; j < i; j++)
  40. if(getCost(k - 1, j, i) > getCost(k - 1, idx, i))
  41. idx = j;
  42. dp[k][i] = getCost(k - 1, idx, i);
  43. T[k][i] = idx;
  44. }
  45. int L = 0;
  46. int curr = N;
  47. for(; K; K--)
  48. {
  49. sol[++L] = curr;
  50. curr = T[K][curr];
  51. }
  52. for(int i = L; i >= 1; i--)
  53. fout << sol[i] << " ";
  54. fout << "\n";
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement