Advertisement
Dang_Quan_10_Tin

Lên Đèn

Oct 11th, 2020 (edited)
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #define NguyenDangQuan the_author
  2. #define my_heart love_you_to_the_moon_and_back
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. using ll = long long;
  7. using ld = long double;
  8. using ull = unsigned long long;
  9.  
  10. bool typetest;
  11. inline void fastIOfileinput()
  12. {
  13.     ios::sync_with_stdio(0);
  14.     cin.tie(0);
  15.     cout.tie(0);
  16.     typetest = 0;
  17. }
  18.  
  19. const int N = 3e5 + 5;
  20.  
  21. int n, k;
  22. ll a[N], dp[N][4][10][10];
  23. const ll Inf = 1e18;
  24.  
  25. void Read()
  26. {
  27.     cin >> n >> k;
  28.     for (int i = 1; i <= n; ++i)
  29.         cin >> a[i];
  30.     if (n < 3)
  31.     {
  32.         cout << *min_element(a + 1, a + n + 1);
  33.         exit(0);
  34.     }
  35. }
  36.  
  37. void Minimize(ll &x, ll y)
  38. {
  39.     if (x > y)
  40.         x = y;
  41. }
  42.  
  43. /// j : cho
  44. /// t : nhan
  45.  
  46. void Do_Optimization()
  47. {
  48.     for (int i = 1; i <= n; ++i)
  49.         for (int j = 0; j <= k; ++j)
  50.             for (int t = 0; t <= k; ++t)
  51.             {
  52.                 /// 00 = 0
  53.                 Minimize(dp[i][0][j][t], min(dp[i - 1][2][j][t], j > 0 ? dp[i - 1][2][j - 1][t] + a[i] : Inf));
  54.                 /// 01 = 1
  55.                 Minimize(dp[i][1][j][t], min(dp[i - 1][0][j][t] + a[i], t > 0 ? dp[i - 1][0][j][t - 1] : Inf));
  56.                 Minimize(dp[i][1][j][t], min(dp[i - 1][2][j][t] + a[i], t > 0 ? dp[i - 1][2][j][t - 1] : Inf));
  57.                 /// 10 = 2
  58.                 Minimize(dp[i][2][j][t], min(dp[i - 1][1][j][t], j > 0 ? dp[i - 1][1][j - 1][t] + a[i] : Inf));
  59.                 Minimize(dp[i][2][j][t], min(dp[i - 1][3][j][t], j > 0 ? dp[i - 1][3][j - 1][t] + a[i] : Inf));
  60.                 /// 11 = 3
  61.                 Minimize(dp[i][3][j][t], min(dp[i - 1][1][j][t] + a[i], t > 0 ? dp[i - 1][1][j][t - 1] : Inf));
  62.                 Minimize(dp[i][3][j][t], min(dp[i - 1][3][j][t] + a[i], t > 0 ? dp[i - 1][3][j][t - 1] : Inf));
  63.             }
  64. }
  65.  
  66. void Reset()
  67. {
  68.     fill_n(&dp[0][0][0][0], N * 10 * 10 * 4, Inf);
  69. }
  70.  
  71. void Solve()
  72. {
  73.     ll ans = Inf;
  74.     Reset();
  75.     dp[0][0][0][0] = dp[0][2][0][0] = 0;
  76.     Do_Optimization();
  77.     for (int i = 0; i <= k; ++i)
  78.         ans = min(ans, min(min(dp[n][0][i][i], dp[n][3][i][i]), min(dp[n][1][i][i], dp[n][2][i][i])));
  79.     cout << ans;
  80. }
  81.  
  82. int32_t main()
  83. {
  84.     fastIOfileinput();
  85.     if (typetest)
  86.  
  87.     {
  88.         int t;
  89.         cin >> t;
  90.         while (t--)
  91.         {
  92.             Read();
  93.             Solve();
  94.         }
  95.     }
  96.     else
  97.     {
  98.         Read();
  99.         Solve();
  100.     }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement