fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n;
  5. long long X,Y,Z;
  6. vector<int> inpa, inpb;
  7.  
  8.  
  9. void sub12()
  10. {
  11. int LIM = 0;
  12. for(int i =1; i<=n; i++) LIM += abs(inpa[i] - inpb[i]);
  13. int OFFSET = LIM;
  14. int INF = 2*LIM;
  15. vector<vector<long long>> dp(n+1, vector<long long>(INF+1, 1e18));
  16. dp[0][OFFSET] = 0;
  17. for(int i =1; i<=n; i++)
  18. {
  19. for(int j = 0; j<=INF; j++)
  20. {
  21. for(int x = 0; x<=INF; x++)
  22. {
  23. int di = inpb[i] - inpa[i];
  24. long long cost = 0;
  25. if(di < 0)
  26. {
  27.  
  28. int newj = j - OFFSET;
  29. int newx = x - OFFSET;
  30. if(newx - di < newj) cost = ((long long)newj - newx + di) *X;
  31. else cost = ((long long)abs(newj - newx + di)) * Y;
  32. }
  33. else
  34. {
  35. int newj = j - OFFSET;
  36. int newx = x - OFFSET;
  37. di*=-1;
  38. if(newx + di < newj) cost = ((long long)newj - newx - di) *X;
  39. else cost = ((long long)abs(newj - newx - di)) * Y;
  40. }
  41. dp[i][j] = min(dp[i][j], ((long long)abs(x - OFFSET)*Z) + cost + dp[i-1][x]);
  42. }
  43. }
  44. }
  45. cout << dp[n][OFFSET];
  46. }
  47.  
  48.  
  49. int main()
  50. {
  51. ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  52. cin >> n;
  53. cin >> X >> Y >> Z;
  54. inpa.resize(n+1);
  55. inpb.resize(n+1);
  56. for(int i =1; i<=n; i++) cin >> inpa[i] >> inpb[i];
  57. sub12();
  58.  
  59. return 0;
  60. }
  61.  
Success #stdin #stdout 0.01s 5288KB
stdin
4 100 200 1
1 4
2 3
3 2
4 0
stdout
210