Iamtui1010

lastzero.cpp

Jan 13th, 2022 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<vector>
  4.  
  5. #define long long long
  6. #define nln '\n'
  7.  
  8. using namespace std;
  9.  
  10. pair<long, long> twofive(long n)
  11. {
  12.    long t = 0, f = 0;
  13.    while (n % 2 == 0){
  14.         ++t;
  15.         n /= 2;
  16.    }
  17.    while (n % 5 == 0){
  18.         ++f;
  19.         n /= 5;
  20.    }
  21.    return {t, f};
  22. }
  23.  
  24. int main()
  25. {
  26.     // Input
  27.     cin.tie(0)->sync_with_stdio(0);
  28.     cout.tie(0)->sync_with_stdio(0);
  29.     //freopen("lastzero.inp", "r", stdin);
  30.     long n, k;
  31.     cin >> n >> k;
  32.     vector<long> a(n+1, 0), t(n+1, 0), f(n+1, 0);
  33.     for (long i = 1; i <= n; ++i){
  34.         cin >> a[i];
  35.         pair<long, long> tem = twofive(a[i]);
  36.         t[i] = tem.first;
  37.         f[i] = tem.second;
  38.     }
  39.     // Process
  40.     // Init dp array
  41.     vector<vector<vector<long>>> dp(n+1);
  42.     for (long i = 0; i <= n; ++i){
  43.         dp[i].resize(k+1);
  44.         for (long j = 0; j <= k; ++j)
  45.             dp[i][j].resize(30*n+1, -30*n);
  46.     }
  47.     dp[0][0][0] = 0;
  48.     for (long idx = 1; idx <= n; ++idx)
  49.         for (long cnt = 0; cnt <= k; ++cnt)
  50.             for (long two = 0; two <= 30*n; ++two)
  51.                 if (cnt > 0 && two >= t[idx] && dp[idx-1][cnt][two] < dp[idx-1][cnt-1][two-t[idx]]+f[idx])
  52.                     dp[idx][cnt][two] = dp[idx-1][cnt-1][two-t[idx]]+f[idx];
  53.                 else
  54.                     dp[idx][cnt][two] = dp[idx-1][cnt][two];
  55.     long ans = 0;
  56.     for (long two = 0; two <= 30*n; ++two){
  57.         dp[n][k][two] = (dp[n][k][two] < two) ? dp[n][k][two] : two;
  58.         ans = (ans >= dp[n][k][two]) ? ans : dp[n][k][two];
  59.     }
  60.     cout << ans << nln;
  61.     return 0;
  62. }
  63.  
Add Comment
Please, Sign In to add comment