P - 你是ACM的希望

题目链接 http://acm.sdut.edu.cn/onlinejudge3/contests/4098/problems/P

题面

该测试具体描述如下:
规定一个数字末尾 00 的个数即是这个数的希望值。
每次测试中,刘老师将分发给每人一个有 nn 个数的数组,你需要恰好选择 kk 个数字(每个数只能选一次),并将这 kk 个数相乘得到一个数字 uu
数字 uu 的希望值即为每个人在测试得到的最终希望值。
如果你可以在每次测试中均取得最大的希望值,刘老师将送给你一个 Accepted
如果你能 AC 这道题目,你将获得“ACM 的希望”荣誉称号。
Inut
第一行包含两个整数 n 和 k (1≤n≤200,1≤k≤n)
第二行包含 n 个以空格分隔的整数 代表n个数字
Output
输出一个整数,表示你在测试过程中能获得的最大希望值。
Sample
Input
3 2
50 4 20
5 3
15 16 3 25 9
Output
3
3

解析

背包问题变式,可以先从三维的角度考虑一下问题。
• 首先 2 与 5 乘积才可以得出末尾 0
• 记录每个数能分解出的 2 和 5 的数目, 然后 01 背包即可。
• 用 dpi,j,m 表示从前 i 个数中选出 j 个数其中 5 的个数为 m 个的情况下 2 的数目最多是多少。
• 初始状态为 dp0,0,0 = 0 , 推到终态 dpn,k,x 即可。注意要存在上一种状态才能到达下一种状态。
• 开三维可能会 MLE, 可以优化一下空间, 去掉 i 这维就变成了一个二维背包问题。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 2100;
const int MAXM = 6010;
int n, k, a, dp[MAXN][MAXM], cnt2[MAXN], cnt5[MAXN];
void work() {
    scanf("%lld%lld", &n, &k);
    int mx = 0;
    for(int i = 1; i <= n; ++i) {
        int a;
        scanf("%lld", &a);
        while(a % 5 == 0) ++cnt5[i], a /= 5;
        mx += cnt5[i];
        while(a % 2 == 0) ++cnt2[i], a /= 2;
    }
    memset(dp, -0x3f, sizeof(dp));
    dp[0][0] = 0;
    int ans = 0;
    for(int i = 1; i <= n; ++i) {
        for(int j = min(i, k); j >= 1; j--)
            for(int l = cnt5[i]; l <= mx; ++l) {
                dp[j][l] = max(dp[j][l], dp[j - 1][l - cnt5[i]] + cnt2[i]);
                if(j == k) ans = max(ans, min(l, dp[j][l]));
            }
    }
    printf("%lld\n", ans);
}
signed main() {
    int t = 1;
    // scanf("%d", &_);
    while(t--) work();
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Aruba ACMP是Aruba Certified Mobility Professional的缩写,是由全球领先的网络设备供应商Aruba Networks提供的一种认证。ACMP认证是Aruba Networks为网络工程师和网络管理员设计的专业认证,旨在验证他们在Aruba移动解决方案设计、配置和优化方面的技能和知识。 获得Aruba ACMP认证的人员需要通过相应的考试,涵盖的内容包括Aruba移动解决方案的基本概念、客户需求分析、无线网络规划和设计、解决故障以及工程实施等。考试是基于实际场景情况设计的,要求考生具备实践操作的能力。 Aruba ACMP认证的取得对于从事Aruba无线网络产品和解决方案布署的专业人士来说非常有价值。持有ACMP认证的人员具备了在设计和部署Aruba WLAN解决方案时所需的技能和知识,能够根据客户需求设计出最佳的网络拓扑结构,并配置和优化无线网络设备以满足性能和可靠性要求。 此外,ACMP认证还显示了持有者在无线网络管理和故障排除方面的能力,能够快速解决各种网络问题并提供高质量的技术支持。通过ACMP认证,网络工程师和网络管理员能够更好地应对日益复杂的无线网络环境,提高网络服务的质量和效率。 总之,Aruba ACMP认证是一个重要的专业认证,能够验证持证人在Aruba移动解决方案设计、配置和优化方面的技能和知识,增强其在无线网络领域的竞争力和职业发展前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值