博客
关于我
每日一题-dfs遍历
阅读量:326 次
发布时间:2019-03-04

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

为了解决这个问题,我们需要计算小L在选择物品时,使得选出来的总喜欢值大于给定的值M的方案数。每类物品最多只能选择一个物品,可以不选。

方法思路

我们可以使用动态规划的方法来解决这个问题。具体步骤如下:

  • 初始化:使用一个字典dp_current来记录当前层级的总和及其对应的方案数,初始时dp_current为{0:1},表示在处理0层级时,总和为0的方案数为1。
  • 逐层处理:对于每一层级,创建一个新的字典dp_next,记录下一层级的总和及其方案数。
  • 遍历物品:对于每个当前层级的总和,遍历该层级的所有物品,计算新的总和。如果新的总和超过M,则直接计入结果;否则,将其加入dp_next
  • 更新状态:将dp_current更新为dp_next,继续处理下一层级。
  • 输出结果:处理完所有层级后,输出结果。
  • 这种方法通过逐层处理每个层级,并记录当前的总和,避免了重复计算,并且在处理v超过M的情况时,可以立即计入结果,从而减少计算量。

    解决代码

    def main():
    import sys
    input = sys.stdin.read().split()
    ptr = 0
    while ptr < len(input):
    k = int(input[ptr])
    M = int(input[ptr+1])
    ptr +=2
    layers = []
    for _ in range(k):
    ai = int(input[ptr])
    vs = list(map(int, input[ptr+1:ptr+1+ai]))
    layers.append(vs)
    ptr += 1 + ai
    result = 0
    dp_current = {0:1}
    for vs in layers:
    dp_next = {}
    for v, count in dp_current.items():
    for vj in vs:
    new_v = v + vj
    if new_v > M:
    result += count
    else:
    if new_v in dp_next:
    dp_next[new_v] += count
    else:
    dp_next[new_v] = count
    dp_current = dp_next
    print(result)
    if __name__ == "__main__":
    main()

    代码解释

  • 读取输入:使用sys.stdin.read()读取所有输入,并进行解析。
  • 初始化变量:读取k和M的值,初始化dp_current字典。
  • 处理每一层级:对于每一层级的物品,遍历当前层级的所有总和,计算新的总和,并更新dp_next字典。
  • 更新状态:将dp_current更新为dp_next,继续处理下一层级。
  • 输出结果:处理完所有层级后,输出结果。
  • 这种方法有效地计算了满足条件的方案数,避免了重复计算,并且在处理较大值时表现良好。

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

    你可能感兴趣的文章
    Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
    查看>>
    nginx最最最详细教程来了
    查看>>
    Nginx服务器---正向代理
    查看>>
    Nginx服务器上安装SSL证书
    查看>>
    Nginx服务器的安装
    查看>>
    Nginx模块 ngx_http_limit_conn_module 限制连接数
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>