837D. Round Subset

来源:互联网 发布:ssh端口号是多少 编辑:程序博客网 时间:2024/06/06 23:15

http://codeforces.com/problemset/problem/837/D

#include<bits/stdc++.h>
using namespace std;
#define int long long
int dp[234][5200],n,k,tmp;
main()
{
    memset(dp,-1,sizeof dp);
    dp[0][0]=0;
    cin>>n>>k;
    for(int s=0; s<n; s++)
    {
        cin>>tmp;
        int t=0,f=0;
        while(tmp%2==0) t++,tmp/=2;
        while(tmp%5==0) f++,tmp/=5;
        for(int i=k-1; i>=0; i--)
            for(int j=0; j<5200; j++)
                if(dp[i][j]!=-1)
                    dp[i+1][j+f]=max(dp[i+1][j+f],dp[i][j]+t);//dp[][]表示2的个数
    }
    int ans=0;
    for(int i=0; i<5200; i++) ans=max(ans,min(i,dp[k][i]));//5的个数和2的个数中最小的
    cout<<ans<<endl;
}