Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define int long long
- #define fi first
- #define se second
- void solve();
- signed main()
- {
- cin.tie(0)->sync_with_stdio(0);
- //freopen("Bai1.inp","r",stdin);
- //freopen("Bai1.out","w",stdout);
- solve();
- return 0;
- }
- void solve()
- {
- int n,k;
- cin >> n >> k;
- int a[n+1], b[n+1], dp[n+1][n+1][n*30+1];
- for (int i = 1; i <= n; i++){
- int x;
- cin >> x;
- a[i] = 0;
- b[i] = 0;
- while (x % 2 == 0){
- a[i]++;
- x /= 2;
- }
- while (x % 5 == 0){
- b[i]++;
- x /= 5;
- }
- }
- //===============================================================
- for (int i = 0; i <= n; i++)
- for (int j = 0; j <= n; j++)
- for (int l = 0; l <= n*30; l++)
- dp[i][j][l] = -1e9;
- dp[0][0][0] = 0;
- for (int i = 1; i <= n; i++)
- for (int j = 0; j <= min(i,k); j++)
- for (int l = 0; l <= n*30; l++){
- if (j >= 1 && l >= a[i]) {
- dp[i][j][l] = max(dp[i-1][j][l], dp[i - 1][j - 1][l - a[i]] + b[i]);
- }
- else dp[i][j][l] = dp[i - 1][j][l];
- }
- //===============================================================
- // for (int i = 1; i <= n*30; i++)
- // cout << dp[n][k][i] << '\n';
- int ans = 0;
- for (int i = 0; i <= n*30; i++) {
- ans = max(ans, min(i, dp[n][k][i]));
- }
- cout << ans << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment