博客
关于我
2020ccpc威海 L Clock Master(数论 + 分组背包)
阅读量:283 次
发布时间:2019-03-01

本文共 1548 字,大约阅读时间需要 5 分钟。

为了解决这个问题,我们需要设计一个高精度钟表的组合,使得在给定的预算内,指针方向组合的数量最大化。这个问题可以通过动态规划和数论中的质数幂次分解来解决。

方法思路

  • 质数幂次分解:生成所有可能的质数幂次,因为这些数在乘积中能够带来最大的组合数。例如,质数2的幂次包括2, 4, 8, 16等。
  • 动态规划:使用动态规划来解决这个问题。我们将预算分成不同的质数幂次,使得它们的总和不超过预算,并且乘积最大化。为了处理乘积的最大化,我们使用对数转换,将乘积转换为对数之和,这样可以避免数值溢出,并且更容易处理。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;vector
    generate_powers(int max_b) { vector
    ts; for(int p = 2; p <= max_b; ++p) { if (p == 1) continue; int current = p; while (current <= max_b) { ts.push_back(current); current *= p; } } sort(ts.begin(), ts.end()); ts.erase(unique(ts.begin(), ts.end()), ts.end()); reverse(ts.begin(), ts.end()); return ts;}int main() { const int MAX_B = 30000; vector
    ts = generate_powers(MAX_B); int T; scanf("%d", &T); for(int _ = 0; _ < T; ++_) { int b; scanf("%d", &b); if (b == 0) { printf("0.0000000000\n"); continue; } vector
    dp(b + 1, -1e18); dp[0] = 0.0; for(int ti : ts) { if (ti > b) continue; for(int i = b; i >= ti; --i) { if (dp[i - ti] != -1e18) { double new_val = dp[i - ti] + log(ti); if (new_val > dp[i]) { dp[i] = new_val; } } } } printf("%.9f\n", dp[b]); } return 0;}

    代码解释

  • 质数幂次生成:函数generate_powers生成所有可能的质数幂次,直到它们不超过给定的最大预算值。这些值用于动态规划中的选择。
  • 动态规划初始化:我们初始化一个动态规划数组dp,其中dp[i]表示在预算i下,最大乘积的对数值。初始时,dp[0]设为0,其他值设为一个很小的负数表示不可达。
  • 动态规划更新:对于每个质数幂次ti,我们从预算b开始倒序遍历,更新dp[i]的值。每次更新时,检查是否可以将ti加入当前预算,得到更大的乘积值。
  • 结果输出:对于每个测试用例,输出预算b对应的最大乘积的对数值。
  • 这种方法确保了在给定的预算内,找到最优的指针组合,使得组合数最大化。

    转载地址:http://adio.baihongyu.com/

    你可能感兴趣的文章
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 学习(一):Nginx 下载和启动
    查看>>
    nginx 常用指令配置总结
    查看>>
    Nginx 常用配置清单
    查看>>
    nginx 常用配置记录
    查看>>
    nginx 开启ssl模块 [emerg] the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 源码完全注释(11)ngx_spinlock
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的 SSL 模块安装
    查看>>
    Nginx 的优化思路,并解析网站防盗链
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    Nginx 相关介绍(Nginx是什么?能干嘛?)
    查看>>
    Nginx 知识点一网打尽:动静分离、压缩、缓存、跨域、高可用、性能优化...
    查看>>
    nginx 禁止以ip形式访问服务器
    查看>>
    NGINX 端口负载均衡
    查看>>
    Nginx 结合 consul 实现动态负载均衡
    查看>>
    Nginx 负载均衡与权重配置解析
    查看>>
    Nginx 负载均衡详解
    查看>>
    Nginx 负载均衡配置详解
    查看>>