Advertisement
K_Y_M_bl_C

Untitled

Oct 22nd, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7. typedef vector<int> vi;
  8.  
  9. #define X first
  10. #define Y second
  11. #define mk make_pair
  12. #define inb push_back
  13. #define y1 ggggggggggggg
  14.  
  15. int solve();
  16.  
  17. int main()
  18. {
  19.     solve();
  20.     return 0;
  21. }
  22.  
  23. const int BUFSZ = (int)1e6 + 7;
  24.  
  25. char buf[BUFSZ];
  26.  
  27. string get_str()
  28. {
  29.     scanf(" %s", buf);
  30.     return string(buf);
  31. }
  32.  
  33. const double INF = (double)1e9 + 7;
  34.  
  35. int solve()
  36. {
  37.     int n;
  38.     scanf("%d", &n);
  39.     vi t(n);
  40.     for (int i = 0; i < n; ++i)
  41.     {
  42.         scanf("%d", &t[i]);
  43.     }
  44.     vector<vi> f(n, vi(n));
  45.     for (int l = 0; l < n; ++l)
  46.     {
  47.         f[l][l] = 140;
  48.         for (int r = l + 1; r < n; ++r)
  49.         {
  50.             f[l][r] = 140 + max(t[r] - t[l] - 1800, (r - l) * 20);
  51.             //printf("%d %d : %d\n", l + 1, r + 1, f[l][r]);
  52.         }
  53.     }
  54.     vector<vi> dp(n, vi(n + 1, INF));
  55.     vi mindp(n, INF);
  56.     for (int i = 0; i < n; ++i)
  57.     {
  58.         dp[i][i + 1] = f[0][i];
  59.         for (int j = 1; j <= i; ++j)
  60.         {
  61.             dp[i][j] = mindp[i - j] + f[i - j + 1][i];
  62.         }
  63.         for (int j = 0; j < (int)dp[i].size(); ++j)
  64.             mindp[i] = min(mindp[i], dp[i][j]);
  65.     }
  66.     printf("%d\n", mindp[n - 1]);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement