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

本文共 1561 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>