Advertisement
Guest User

The CODEleones

a guest
Feb 28th, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <fstream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("copaci2.in");
  7. ofstream fout("copaci2.out");
  8.  
  9. int n, k;
  10.  
  11. struct data {
  12.     int h;
  13.     int c;
  14. }v[1005];
  15.  
  16. int d1[1005], d2[1005], d[1005];
  17.  
  18. inline int modul(int x) {
  19.     return (x > 0 ? x : -x);
  20. }
  21.  
  22. bool verif(int H) {
  23.  
  24.     for (int i = 0; i <= 1000; i++)
  25.         d1[i] = d2[i] = 0;
  26.  
  27.     for (int i = 1; i <= n; i++) {
  28.  
  29.         int front = 1, back = 0;
  30.  
  31.         for (int j = 0; j < 1000; j++) {
  32.  
  33.             while (front <= back && d1[j] <= d1[d[back]])
  34.                 back--;
  35.  
  36.             d[++back] = j;
  37.  
  38.             if (j - d[front] == 2 * H + 1)
  39.                 front++;
  40.  
  41.             int x = j - H;
  42.  
  43.             if (x > 0)
  44.                 d2[x] = d1[d[front]] + modul(v[i].h - j + H) * v[i].c;
  45.  
  46.         }
  47.  
  48.         for (int j = 1000 - H; j <= 1000; j++) {
  49.  
  50.             if (j - d[front] == 2 * H + 1)
  51.                 front++;
  52.  
  53.             d2[j] = d1[d[front]] + modul(v[i].h - j) * v[i].c;
  54.  
  55.         }
  56.  
  57.         for (int j = 0; j <= 100; j++) {
  58.             d1[j] = d2[j];
  59.             d2[j] = 0;
  60.         }
  61.  
  62.     }
  63.     if (d1[H] <= k)
  64.         return 1;
  65.     return 0;
  66.  
  67. }
  68.  
  69. int main() {
  70.  
  71.     fin >> n >> k;
  72.  
  73.     for (int i = 1; i <= n; i++)
  74.         fin >> v[i].h >> v[i].c;
  75.  
  76.     int st = 0, dr = 1000;
  77.  
  78.     while (st <= dr) {
  79.  
  80.         int mid = (st + dr) / 2;
  81.  
  82.         if (verif(mid))
  83.             dr = mid - 1;
  84.         else
  85.             st = mid + 1;
  86.  
  87.     }
  88.  
  89.     fout << st << "\n";
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement