Helicator

zeroes.cpp

Jan 13th, 2022
604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define fi first
  5. #define se second
  6. void solve();
  7.  
  8. signed main()
  9. {
  10.     cin.tie(0)->sync_with_stdio(0);
  11.     //freopen("Bai1.inp","r",stdin);
  12.     //freopen("Bai1.out","w",stdout);
  13.     solve();
  14.     return 0;
  15. }
  16.  
  17. void solve()
  18. {
  19.     int n,k;
  20.     cin >> n >> k;
  21.     int a[n+1], b[n+1], dp[n+1][n+1][n*30+1];
  22.     for (int i = 1; i <= n; i++){
  23.         int x;
  24.         cin >> x;
  25.         a[i] = 0;
  26.         b[i] = 0;
  27.         while (x % 2 == 0){
  28.             a[i]++;
  29.             x /= 2;
  30.         }
  31.         while (x % 5 == 0){
  32.             b[i]++;
  33.             x /= 5;
  34.         }
  35.     }
  36.     //===============================================================
  37.     for (int i = 0; i <= n; i++)
  38.         for (int j = 0; j <= n; j++)
  39.             for (int l = 0; l <= n*30; l++)
  40.                 dp[i][j][l] = -1e9;
  41.     dp[0][0][0] = 0;
  42.     for (int i = 1; i <= n; i++)
  43.         for (int j = 0; j <= min(i,k); j++)
  44.             for (int l = 0; l <= n*30; l++){
  45.                 if (j >= 1 && l >= a[i]) {
  46.                     dp[i][j][l] = max(dp[i-1][j][l], dp[i - 1][j - 1][l - a[i]] + b[i]);
  47.                 }
  48.                 else dp[i][j][l] = dp[i - 1][j][l];
  49.     }
  50.     //===============================================================
  51.     // for (int i = 1; i <= n*30; i++) 
  52.     //  cout << dp[n][k][i] << '\n';
  53.     int ans = 0;
  54.         for (int i = 0; i <= n*30; i++) {
  55.             ans = max(ans, min(i, dp[n][k][i]));
  56.         }
  57.     cout << ans << '\n';
  58. }
Advertisement
Add Comment
Please, Sign In to add comment