zoukankan      html  css  js  c++  java
  • 2019vivo秋招提前批笔试题第3题

    笔试的时候没做出来,就顺手截图了。

    虽然知道要用动态规划做,但我一直就不太懂动态规划。笔试完又花了2小时把它做出来了。也不知道性能怎么样,但还好做出来了。

    def solution(n, toltal_money, until_price, until_hot):
        # 二维数组,每一行代表0到total_money每一个数对应的解(解是一个数组,第0列是最高热度值,后面分别是凑成此热度的因子)
        # 因为不允许重复采购同一个商品,所以需要标识一下凑成此热度值时已经购买的商品,方便后面的解用到时查看那些商品是已经购买了的。
        price_hot = [[0 for a in range(n+1)] for k in range(toltal_money + 1)]
        for i in range(toltal_money + 1):
            j = 0
            # 临时数组,保存的是二维数组的每一行的值(0到total_money的某些数值的解可能会有多个解法,
            # 但我们需要找出热度值最高的哪一个,所以这里需要临时保存一下,在确定了最高热度值得时候再把这个解复制到二维数组中去)
            temp = [0 for i in range(n+1)]
            # 构造最优解
            while j < n:
                if (i - until_price[j]) >= 0:
                    # 判断是否重复买了商品,需要将上一个最高热度值得因子组成复制下来。
                    for x in range(1, n+1):
                        temp[x] = price_hot[i - until_price[j]][x]
                    # 如果新购买的这个商品没有在上一个解里被标示,则可以构成一个解
                    if temp[j+1] == 0:
                        last = price_hot[i - until_price[j]][0] + until_hot[j]
                        # 找出最优解
                        if temp[0] < last:
                            temp[0] = last
                            # 标识已购买得商品,这里我把商品得热度填进去做了标识,这样就可以在数组中直接看出最高热度的组成因子
                            # 当然把商品加个填进去做标识,甚至直接把它标为1也可以。
                            temp[j+1] = until_hot[j]
                            # 将临时存放得最优解放到二维数组里
                            for x in range(n + 1):
                                price_hot[i][x] = temp[x]
                j += 1
        return price_hot[total_money][0]
    
    
    n = 6
    total_money = 1000
    until_price = [200, 600, 100, 180, 300, 450]
    until_hot = [6, 10, 3, 4, 5, 8]
    
    print("total_money=1000时的解:", solution(n, total_money, until_price, until_hot))
    
  • 相关阅读:
    Ubuntu下hadoop2.4搭建集群(单机模式)
    软考历程(2)——海明码校验
    key 串口
    android删除文件出错
    ORACLE 11G没有备份文件參数文件在异机通过rman备份恢复找回被误删的数据
    【SICP归纳】2 高阶函数和数据抽象
    Java加密算法 AES
    从BAE到SAE,从SAE又回到BAE
    velocity-字母序号 list
    Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA
  • 原文地址:https://www.cnblogs.com/ChangAn223/p/10976940.html
Copyright © 2011-2022 走看看