fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define ld long double
  4. #define nmax (long long)(1e6+7)
  5. #define oo (long long)(1e18)
  6. #define INF (int)(1e9+7)
  7. #define fi first
  8. #define se second
  9. #define pii pair<ll, ll>
  10. #define Hung "D"
  11. using namespace std;
  12.  
  13. ll n, b[2007], dp[1 << 10][2007];
  14. vector<pii> v;
  15.  
  16. int main()
  17. {
  18. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  19. if (fopen(Hung".inp", "r")){
  20. freopen(Hung".inp", "r", stdin);
  21. freopen(Hung".out", "w", stdout);
  22. }
  23. cin >> n;
  24. for (ll i = 1; i <= n; i++) cin >> b[i];
  25. sort(b + 1, b + n + 1);
  26. ll cnt = 0;
  27. b[n + 1] = oo;
  28. v.push_back({0, 0});
  29. for (ll i = 1; i <= n; i++){
  30. if (b[i] == b[i + 1]) cnt++;
  31. else{
  32. v.push_back({b[i], cnt + 1});
  33. cnt = 0;
  34. }
  35. }
  36. ll SEQ = ((1 << 1) | (1 << 8) | (1 << 9));
  37. ll N = v.size() - 1;
  38. for (ll mask = 0; mask < (1 << 10); mask++)
  39. for (ll i = 0; i <= N; i++)
  40. dp[mask][i] = oo;
  41. dp[0][0] = v[0].se;
  42. dp[1][0] = 0;
  43. for (ll i = 0; i <= N; i++)
  44. for (ll mask = 0; mask < (1 << 10); mask++){
  45. ll newmask = (mask << (v[i + 1].fi - v[i].fi)) & ((1 << 10) - 1);
  46. if (v[i + 1].fi - v[i].fi >= 10) newmask = 0;
  47. dp[newmask][i + 1] = min(dp[newmask][i + 1], dp[mask][i] + v[i + 1].se);
  48. if ((newmask & SEQ) == 0)
  49. dp[newmask | 1][i + 1] = min(dp[newmask | 1][i + 1], dp[mask][i]);
  50. }
  51.  
  52. ll res = oo;
  53. for(ll mask = 0; mask < (1 << 10); mask++)
  54. res = min(res, dp[mask][N]);
  55. cout<<res;
  56. return 0;
  57. }
Success #stdin #stdout 0.01s 18356KB
stdin
Standard input is empty
stdout
Standard output is empty