Advertisement
cyberjab

Кафе

Jun 27th, 2024
494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #pragma GCC optimize("03")
  2. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  3. #include <iostream>
  4. #include <iomanip>
  5. #include <cstdlib>
  6. #include <cstdio>
  7. #include <string>
  8. #include <vector>
  9. #include <map>
  10. #include <set>
  11. #include <unordered_map>
  12. #include <unordered_set>
  13. #include <queue>
  14. #include <deque>
  15. #include <cmath>
  16. #include <numeric>
  17. #include <algorithm>
  18. #include <ctime>
  19. #include <chrono>
  20. #include <random>
  21. #include <functional>
  22. #include <stack>
  23. //#include <windows.h>
  24. //void* operator new(size_t size) {
  25. //    if (void* ptr = HeapAlloc(GetProcessHeap(), 0, size ? size : 1)) return ptr;
  26. //    throw std::bad_alloc{};
  27. //}
  28. //void operator delete(void* ptr) {
  29. //    HeapFree(GetProcessHeap(), 0, ptr);
  30. //}
  31.  
  32. using namespace std;
  33. using ll = long long;
  34. using db = double;
  35. using ldb = long double;
  36. using pii = pair<int, int>;
  37. using pll = pair<ll, ll>;
  38. using vint = vector<int>;
  39. using vll = vector<ll>;
  40. using vst = vector<string>;
  41. #define all(x) x.begin(), x.end()
  42. #define size(x) int(x.size())
  43. #define rep(x) for(int rep_i = 0; rep_i < x; ++rep_i)
  44. #define forp(i, s, f) for(int i = s; i < f; ++i)
  45. #define form(i, s, f) for(int i = s; i > f; --i)
  46. #define PB push_back
  47. #define MP make_pair
  48. #define F first
  49. #define S second
  50. #define elif else if
  51. #define dprint(x) for (auto now: x) cout << now << '\n'
  52.  
  53. const int MOD = 1e9 + 7;
  54. const int MOD2 = 998244353;
  55. const int INF = 2e9 + 7;
  56. const ll LINF = 1e18 + 7;
  57. const double EPS = 1e-9;
  58. const long double PI = acosl(-1.0);
  59.  
  60. void solve() {
  61.     int n;
  62.     cin >> n;
  63.     vint sp(n);
  64.     int cnt = 0;
  65.     forp(i, 0, n) {
  66.         cin >> sp[i];
  67.         if (sp[i] > 100) cnt++;
  68.     }
  69.     vector<vint> dp(n + 1, vint(cnt + 1, INF));
  70.     vector<vint> prev(n + 1, vint(cnt + 1, 0));
  71.     dp[0][0] = 0;
  72.     prev[0][0] = 0;
  73.     forp(i, 0, n) {
  74.         forp(j, 0, cnt + 1) {
  75.             if (dp[i][j] != INF) {
  76.                 if (dp[i][j] + sp[i] < dp[i + 1][j]) {
  77.                     dp[i + 1][j] = dp[i][j] + sp[i];
  78.                     prev[i + 1][j] = 0;
  79.                 }
  80.                 if (sp[i] > 100) {
  81.                     if (dp[i][j] + sp[i] < dp[i + 1][j + 1]) {
  82.                         dp[i + 1][j + 1] = dp[i][j] + sp[i];
  83.                         prev[i + 1][j + 1] = -1;
  84.                     }
  85.                 }
  86.                 if (j > 0) {
  87.                     if (dp[i][j] < dp[i + 1][j - 1]) {
  88.                         dp[i + 1][j - 1] = dp[i][j];
  89.                         prev[i + 1][j - 1] = 1;
  90.                     }
  91.                 }
  92.             }
  93.         }
  94.     }
  95.     int mn = INF, acnt = 0;
  96.     forp(j, 0, cnt + 1) {
  97.         if (dp[n][j] <= mn) {
  98.             mn = dp[n][j];
  99.             acnt = j;
  100.         }
  101.     }
  102.     cout << mn << '\n';
  103.     vint path;
  104.     int j = acnt;
  105.     form(i, n, 0) {
  106.         if (prev[i][acnt] == 1) {
  107.             path.push_back(i);
  108.         }
  109.         acnt += prev[i][acnt];
  110.     }
  111.     reverse(all(path));
  112.     cout << j << ' ' << size(path) << '\n';
  113.     dprint(path);
  114. }
  115.  
  116.  
  117. int main() {
  118.     ios_base::sync_with_stdio(0);
  119.     cin.tie(0);
  120.     /*cout << setprecision(x)*/
  121.     cout << fixed;
  122.     int t;
  123.     t = 1;
  124.     while (t > 0) {
  125.         solve();
  126.         t--;
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement