题解 | #购物单#

购物单

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4

from ctypes import Array
import sys

while True:
    try:
        #总价格,商品数量
        total, k = list(map(int, input().split()))
        #主商品
        main_key = []
        #权重满意度
        perPrice = {}
        #商品价格
        perValue = {}
        #主商品数据
        mainPrice = []
        mainValue = []
        for i in range(1, k + 1):
            perPrice[i] = [0, 0, 0]
            perValue[i] = [0, 0, 0]
        for i in range(1, k + 1):
            v, p, q = list(map(int, input().split()))
            vp = int(v*p/10)
            if q == 0:
                perPrice[i][0] = vp
                perValue[i][0] = int(v / 10)
                main_key.append(i)
            else:
                if perPrice[q][1] == 0:
                    perPrice[q][1] = vp
                    perValue[q][1] = int(v / 10)
                else:
                    perPrice[q][2] = vp
                    perValue[q][2] = int(v / 10)

        # for key in main_key:
        for key in perPrice.keys():
            if key in main_key:
                mainPrice.append(perPrice[key])
                mainValue.append(perValue[key])
        mm = len(mainPrice)
        nn = int(total / 10)
        dp = [[0] * (nn + 1) for _ in range(mm + 1)]
        for i in range(1, mm + 1):
            p1, p2, p3 = (
                    mainPrice[i - 1][0],
                    mainPrice[i - 1][1],
                    mainPrice[i - 1][2],
                )
            v1, v2, v3 = (
                mainValue[i - 1][0],
                mainValue[i - 1][1],
                mainValue[i - 1][2],
            )
            for j in range(nn + 1):
                dp[i][j] = dp[i - 1][j]
                if j - v1 >= 0:
                    dp[i][j] = max(dp[i][j], p1 + dp[i - 1][j - v1])
                if j - v1 - v2 >= 0:
                    dp[i][j] = max(dp[i][j], p1 + p2 + dp[i - 1][j - v1 - v2])
                if j - v1 - v3 >= 0:
                    dp[i][j] = max(dp[i][j], p1 + p3 + dp[i - 1][j - v1 - v3])
                if j - v1 - v2 - v3 >= 0:
                    dp[i][j] = max(
                        dp[i][j], p1 + p2 + p3 + dp[i - 1][j - v1 - v2 - v3]
                    )
        xx = dp[mm][nn]
        print(dp[mm][nn]*10)
    except:
        break

全部评论

相关推荐

米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务