Alex_tz307

Fundamente XI - 8 / 219

Sep 21st, 2020 (edited)
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. const int NMAX = 1e4 + 4;
  7. bitset < NMAX > sieve;
  8.  
  9. void Eratostene() {
  10.     sieve[0] = sieve[1] = true;
  11.     for(int i = 4; i <= 10000; i += 2)
  12.         sieve[i] = true;
  13.     for(int i = 3; i * i <= 10000; i += 2)
  14.         if(!sieve[i])
  15.             for(int j = i * i; j <= 10000; j += 2 * i)
  16.                 sieve[j] = true;
  17. }
  18.  
  19. int main() {
  20.     ios_base::sync_with_stdio(false);
  21.     cin.tie(nullptr);
  22.     cout.tie(nullptr);
  23.     int N;
  24.     cin >> N;
  25.     Eratostene();
  26.     int index = 1;
  27.     vector < int > a;
  28.     for(int i = 3; i < 10000; i += 2)
  29.         if(!sieve[i]) {
  30.             ++index;
  31.             if(!sieve[index])
  32.                 a.emplace_back(i);
  33.         }
  34.     vector < int > dp(N + 1, INF), t(N + 1);
  35.     dp[0] = 0;
  36.     for(int i = 1; i <= N; ++i)
  37.         for(int x : a)
  38.             if(i - x >= 0 && dp[i] > dp[i - x] + 1) {
  39.                 dp[i] = dp[i - x] + 1;
  40.                 t[i] = x;
  41.             }
  42.     cout << dp[N] << '\n';
  43.     vector < int > sol;
  44.     while(N > 0) {
  45.         sol.emplace_back(t[N]);
  46.         N -= t[N];
  47.     }
  48.     reverse(sol.begin(), sol.end());
  49.     for(int x : sol)
  50.         cout << x << ' ';
  51. }
  52.  
Advertisement
Add Comment
Please, Sign In to add comment