题目3 : 末尾有最多0的乘积

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定N个正整数A1, A2, ... AN。

小Hi希望你能从中选出M个整数,使得它们的乘积末尾有最多的0。

输入

第一行包含两个个整数N和M。

第二行包含N个整数A1, A2, ... AN。

对于30%的数据,1 ≤ M ≤ N ≤ 12

对于100%的数据,1 ≤ M ≤ N ≤ 100  1 ≤ Ai ≤ 1000000000

输出

末尾最多的0的个数

样例输入
4 2
8 25 30 40
样例输出
3

这个组成0就是2 5的个数,找到5的最大值,去枚举2,或者找5去枚举2都可以的吧

dp[i][j][k]表示第i个数选j个数选k个5的个数的0的个数

#include<bits/stdc++.h>
using namespace std;
int dp[][][];
int la(int x,int p)
{
int t=;
while(x%p==) x/=p,t++;
return t;
}
int main()
{
int n,k;
cin>>n>>k;
memset(dp,-,sizeof(dp));
dp[][][]=;
int cur=,sum=,ans=;
for(int i=,x; i<=n; ++i)
{
cin>>x;
int five=la(x,),two=la(x,);
sum+=five,cur^=;
for(int j=; j<=i&&j<=k; ++j)
{
for(int k=; k<=sum; ++k)
{
dp[cur][j][k]=max(dp[cur][j][k],dp[cur^][j][k]);
if(j>=&&k-five>=&&dp[cur^][j-][k-five]>=)
dp[cur][j][k]=max(dp[cur][j][k],dp[cur^][j-][k-five]+two);
}
}
}
for(int i=; i<=sum; i++)
ans=max(ans,min(i,dp[cur][k][i]));
cout<<ans;
return ;
}

最新文章

  1. OpenCASCADE DataExchange DWG
  2. Activity数据传递
  3. UIButton添加倒计时
  4. 重新想象 Windows 8 Store Apps (39) - 契约: Share Contract
  5. maven学习手记 - 2
  6. css3隐藏导航栏总结
  7. Day-12: 进程和线程
  8. [bzoj4755][Jsoi2016]扭动的回文串
  9. combobox数据绑定
  10. 1.6W star 的 JCSprout 阅读体验大提升
  11. 小程序-canvas在IOS手机层级最高无法展示问题
  12. vue 快速入门、常用指令(1)
  13. 3D 数据
  14. scss切页面
  15. [AWS vs Azure] 云计算里AWS和Azure的探究(2)
  16. 批处理设置IP地址 - imsoft.cnblogs
  17. STM8S——Analog/digital converter (ADC)
  18. Informatica 常用组件Lookup之三 关系和平面文件查找
  19. .netMVC Vue axios 获取数据
  20. 第9章 初识STM32固件库—零死角玩转STM32-F429系列

热门文章

  1. COGS 1715. [CQOI2011]动态逆序对
  2. python基础教程总结15——4 新闻聚合
  3. UVA11090 Going in Cycle (二分+判负环)
  4. [uva816]AbbottsRevenge Abbott的复仇(经典迷宫BFS)
  5. 2407: C语言习题 整数转换成字符串
  6. js中异步方案比较完整版(callback,promise,generator,async)
  7. 使用jsp读取某个目录下的所有文件名,并保存在json文件中
  8. Sum All Numbers in a Range-freecodecamp算法题目
  9. Ping 命令的执行过程和应用协议
  10. C#基础-循环语句