博客
关于我
HJ41 称砝码 HJ41 称砝码
阅读量:524 次
发布时间:2019-03-07

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

为了解决这个问题,我们需要计算使用给定的砝码可以称出的物体的不同重量数量。每种砝码有不同的重量和数量,我们需要找到所有可能的总重量。

方法思路

我们可以使用动态规划来解决这个问题。动态规划是一种有效的方法来解决组合问题,尤其是当我们需要计算可以达到的目标值时。

具体步骤如下:

  • 初始化:创建一个布尔数组 dp,其中 dp[i] 表示是否可以通过现有的砝码组合得到重量 i。初始时,dp[0] 被设置为 True,因为我们可以称0重量。
  • 处理每个砝码:对于每个砝码,计算它可以贡献的所有可能的重量,并更新 dp 数组。对于每个砝码的重量和数量,我们从后向前遍历 dp 数组,避免重复计算。
  • 统计结果:遍历 dp 数组,统计所有可以达到的重量数量。
  • 解决代码

    n = int(input())
    m = list(map(int, input().split()))
    x = list(map(int, input().split()))
    max_possible = sum(mi * xi for mi, xi in zip(m, x))
    dp = [False] * (max_possible + 1)
    dp[0] = True
    for i in range(n):
    mi = m[i]
    xi = x[i]
    for k in range(1, xi + 1):
    weight = mi * k
    if weight > max_possible:
    continue
    for j in range(max_possible, weight - 1, -1):
    if dp[j - weight]:
    dp[j] = True
    count = sum(1 for j in range(max_possible + 1) if dp[j])
    print(count)

    代码解释

  • 读取输入:读取砝码的种数 n,每种砝码的重量 m 和数量 x
  • 计算最大可能重量:计算所有砝码的最大可能贡献重量 max_possible
  • 初始化动态规划数组:创建一个大小为 max_possible + 1 的布尔数组 dp,初始时 dp[0]True
  • 处理每个砝码:对于每个砝码,计算其所有可能的贡献重量,并更新 dp 数组。从后向前遍历避免重复计算。
  • 统计结果:遍历 dp 数组,统计所有为 True 的位置,得到可以称出的不同重量数量。
  • 这种方法确保了我们能够高效地计算所有可能的称重结果,并且避免了重复计算,保证了算法的正确性和效率。

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

    你可能感兴趣的文章
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>
    mysql where中如何判断不为空
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>