博客
关于我
51nod 1614 刷题计划
阅读量:333 次
发布时间:2019-03-03

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

为了求解在至少提升m点智力值的情况下,所做题目代码量之和乘以无聊值之和的最小值,我们可以使用动态规划的方法。以下是详细的解决方案:

方法思路

我们可以定义一个动态规划数组dp[k],其中dp[k]表示总智力为k的情况下,最小的代码量之和乘以无聊值之和的值。初始时,总智力为0时,乘积为0,其余情况下初始化为一个非常大的值(如无穷大)。然后,对于每一道题目,我们遍历可能的总智力值,考虑是否加入这道题目,并更新动态规划数组。

具体步骤如下:

  • 初始化动态规划数组dp,其中dp[0]设为0,其余设为无穷大。
  • 遍历每一道题目,更新动态规划数组:
    • 对于每个可能的总智力值k,从当前的最大智力值到0遍历。
    • 如果当前总智力值为kdp[k]不是无穷大,则考虑加入当前题目。
    • 计算新的总智力值k' = k + a_i,新的代码量和无聊值之和。
    • 更新dp[k']为最小值。
  • 遍历所有可能的总智力值,找到dp[k]k >= m的最小值,即为答案。
  • 解决代码

    def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    n = int(data[0])
    m = int(data[1])
    a = []
    b = []
    c = []
    index = 2
    for _ in range(n):
    ai = int(data[index])
    bi = int(data[index+1])
    ci = int(data[index+2])
    a.append(ai)
    b.append(bi)
    c.append(ci)
    index += 3
    # Initialize DP
    dp = [float('inf')] * (m + max(a))
    dp[0] = 0
    for i in range(n):
    ai = a[i]
    bi = b[i]
    ci = c[i]
    # 遍历所有可能的当前总智力值
    for k in range(m + max(a), -1, -1):
    if dp[k] != float('inf'):
    new_k = k + ai
    if new_k > m + max(a):
    continue
    new_b = bi
    new_c = ci
    new_product = dp[k] + new_b * new_c
    if new_product < dp[new_k]:
    dp[new_k] = new_product
    # 找到所有k >= m的最小值
    min_product = float('inf')
    for k in range(m, m + max(a) + 1):
    if dp[k] < min_product:
    min_product = dp[k]
    print(min_product)
    if __name__ == "__main__":
    main()

    代码解释

  • 输入处理:读取输入数据,提取题目数量n、目标智力值m、以及每道题的智力值、代码量和无聊值。
  • 初始化动态规划数组dp[k]记录总智力为k时的最小乘积,初始时dp[0]为0,其他为无穷大。
  • 处理每道题:遍历每道题,更新动态规划数组,考虑是否加入当前题目,计算新的总智力值及其对应的乘积,更新最小值。
  • 查找最小值:遍历所有可能的总智力值,找到满足条件的最小乘积,并输出结果。
  • 通过这种方法,我们可以高效地找到在至少提升m点智力值的情况下,代码量之和乘以无聊值之和的最小值。

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

    你可能感兴趣的文章
    npm ERR! ERESOLVE could not resolve报错
    查看>>
    npm ERR! fatal: unable to connect to github.com:
    查看>>
    npm ERR! Unexpected end of JSON input while parsing near '...on":"0.10.3","direc to'
    查看>>
    npm ERR! Unexpected end of JSON input while parsing near ‘...“:“^1.2.0“,“vue-html-‘ npm ERR! A comp
    查看>>
    npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
    查看>>
    npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
    查看>>
    npm install CERT_HAS_EXPIRED解决方法
    查看>>
    npm install digital envelope routines::unsupported解决方法
    查看>>
    npm install 卡着不动的解决方法
    查看>>
    npm install 报错 EEXIST File exists 的解决方法
    查看>>
    npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
    查看>>
    npm install 报错 Failed to connect to github.com port 443 的解决方法
    查看>>
    npm install 报错 fatal: unable to connect to github.com 的解决方法
    查看>>
    npm install 报错 no such file or directory 的解决方法
    查看>>
    npm install 权限问题
    查看>>
    npm install报错,证书验证失败unable to get local issuer certificate
    查看>>
    npm install无法生成node_modules的解决方法
    查看>>
    npm install的--save和--save-dev使用说明
    查看>>
    npm node pm2相关问题
    查看>>
    npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
    查看>>