m0_62112526 2023-02-12 11:17 采纳率: 50%
浏览 91

Python礼物问题

期末考试小明取得了优异的成绩,妈妈为鼓励小明再接再厉,在网购平台指定了N(2≤N≤50)件礼物供小明挑选。挑选前妈妈提出了以下要求:

1)每种礼物只能挑选1件;

2)所挑选的礼物总价格不能大于V(1≤V≤100)。

已知N件礼物中每件礼物的价格和小明对每件礼物的喜爱值(喜爱值越大喜爱程度越高),请你帮助小明挑选礼物,使得挑选的所有礼物在满足要求的前提下,总的喜爱值最大,并输出最大喜爱值。

例如:

N = 3,V=5,3件礼物的价格和喜爱值分别为(1,2),(2,4),(3,3)。

可挑选第二件礼物(2,4)和第三件礼物(3,3),总价格为5(5=2+3),总喜爱值为7(7=4+3),总价格不大于5且喜爱值最大,输出7。

img


输入描述
第一行输入两个正整数N(2≤N≤50)和V(1≤V≤100),分别表示指定的礼物数量和所挑选的礼物总价格不能大于的值,正整数之间以一个英文逗号隔开

第二行开始,输入N行,每行输入两个正整数J(1≤J≤V)和K(1≤K≤100),分别表示每件礼物的价格和喜爱值,正整数之间以一个英文逗号隔开

输出描述
输出一个整数,表示在满足题目要求下的最大喜爱值

样例输入
3,5
1,2
2,4
3,3
样例输出
7

求帮助!

  • 写回答

4条回答 默认 最新

  • CodeBytes 2023-02-12 11:42
    关注

    该回答引用ChatGPT
    该代码使用了动态规划的思想,具体来说,定义状态 $dp_i$ 表示总价格不超过 $i$ 时可以获得的最大喜爱值,状态转移方程为:

    $dp_j = max(dp_j, dp_{j-w_i} + v_i)$

    其中,$w_i$ 和 $v_i$ 分别表示第 $i$ 件物品的价格和喜爱值。

    def findMaxLove(n, v, items):
        dp = [0 for i in range(v + 1)]
        for i in range(n):
            for j in range(v, items[i][0] - 1, -1):
                dp[j] = max(dp[j], dp[j - items[i][0]] + items[i][1])
        return dp[v]
    
    n = 3
    v = 5
    items = [(1, 2), (2, 4), (3, 3)]
    print(findMaxLove(n, v, items))
    
    
    
    评论

报告相同问题?

问题事件

  • 修改了问题 2月12日
  • 创建了问题 2月12日

悬赏问题

  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统
  • ¥100 rtmpose姿态评估