GastonFontenla

Untitled

Nov 16th, 2019
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.01 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int INF = 1000000000;
  6.  
  7. int main()
  8. {
  9.     int n, m;
  10.     cin >> n >> m;
  11.  
  12.     vector <pair<int, int> > a(n);
  13.     vector <int> ini(n), fin(n);
  14.  
  15.     for(int i=0; i<n; i++)
  16.     {
  17.         cin >> a[i].first >> a[i].second;
  18.         ini[i] = a[i].first-a[i].second;
  19.         fin[i] = a[i].first+a[i].second;
  20.     }
  21.  
  22.     vector <int> DP(m+1, INF);
  23.     DP[0] = 0;
  24.  
  25.     for(int i=1; i<=m; i++)
  26.     {
  27.         for(int j=0; j<n; j++)
  28.         {
  29.             if(ini[j] <= i && i <= fin[j])
  30.             {
  31.                 DP[i] = min(DP[i], DP[i-1]);
  32.             }
  33.             else
  34.             {
  35.                 if(i < ini[j])
  36.                 {
  37.                     DP[i] = min(DP[i], DP[i-1]+ini[j]-i);
  38.                 }
  39.                 else
  40.                 {
  41.                     int x = i-fin[j];
  42.                     DP[i] = min(DP[i], DP[max(0, ini[j]-x-1)]+x);
  43.                 }
  44.             }
  45.         }
  46.     }
  47.  
  48.     cout << DP[m] << endl;
  49.  
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment