HJ16 购物单

2023-10-26 16:30
文章标签 购物单 hj16

本文主要是介绍HJ16 购物单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&tags=&title=&difficulty=0&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37

思路

dp[i][j] i是遍历到第i个物件,j是当前可用预算,dp[i][j]为遍历到第i个物件有预算j时的最大满足值。
当遍历到第i个物件,有预算j 时,有以下情况,取以下情况的最大值作为dp[i][j]的值:

  1. 不选择物件i
  2. 选择物件i
  3. 选择物件i和附件1
  4. 选择物件i和附件2
  5. 选择物件i和附件1和附件2。
    一个五种情况。当物件i是附件的时候,只能是情况1,是主件的话1到5都得过一遍。选之前要算一下选的物件们的价格,看下当下的预算够不够,不够的话也没法选。

代码

python初始化数组如果用列表需要注意行的复制要用for i in range,如果直接用星号乘会是浅拷贝导致修改一个值所有行的对应位置都会改变。

import sysv = None # m+1,3
w = None # m+1, 3
dp = None # m+1,n+1n, m = None, Nonecnt = 0
for line in sys.stdin:a = line.split()if len(a)==2:n, m = int(a[0])//10, int(a[1])v = [[0]*3 for i in range(m+1)]w = [[0]*3 for i in range(m+1)]dp = [[0]*(n+1) for i in range(m+1)]else:cnt += 1vv, p, q = int(a[0])//10, int(a[1]), int(a[2])if q==0:v[cnt][0] = vvw[cnt][0] = vv*pelse:if v[q][1]:v[q][2] = vvw[q][2] = vv*pelse:v[q][1] = vvw[q][1] = vv*pfor i in range(1, m+1):for j in range(1, n+1):dp[i][j] = dp[i-1][j] # 情况1if v[i][0] <= j: # 情况2dp[i][j] = max(dp[i][j], dp[i-1][j-v[i][0]]+w[i][0])if v[i][0]+v[i][1] <= j: # 3dp[i][j] = max(dp[i][j], dp[i-1][j-v[i][0]-v[i][1]]+w[i][0]+w[i][1])if v[i][0]+v[i][2] <= j: # 4dp[i][j] = max(dp[i][j], dp[i-1][j-v[i][0]-v[i][2]]+w[i][0]+w[i][2])if v[i][0]+v[i][1]+v[i][2] <= j: # 5dp[i][j] = max(dp[i][j], dp[i-1][j-v[i][0]-v[i][1]-v[i][2]]+w[i][0]+w[i][1]+w[i][2])
print(dp[m][n]*10)

Ref

https://blog.csdn.net/weixin_45932570/article/details/115428220

这篇关于HJ16 购物单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/285698

相关文章

华为OD机考(HJ16 购物单)

前言 应广大同学要求,开始以OD机考题作为练习题,看看算法和数据结构掌握情况。有需要练习的可以关注下。此题难度略大,需要对背包问题较为熟悉,同时题干信息量较大,都为解题造成了一定难度。 在开始此题前请提前查看Java数据结构与算法(0/1背包问题)-CSDN博客,否则理解有些困难。 描述 王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件

华为OJ——购物单

购物单 题目描述 王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 打印机,扫描仪 书柜 图书 书桌 台灯,文具 工作椅 无 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己

购物单【C语言】华为机试

目录 题目:输入格式输出格式输入样例输出样例 算法背包分组问题代码实现 题目: 王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 打印机,扫描仪 书柜 图书 书桌 台灯,文具 工作椅 无 如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有

华为机考入门python3--(16)牛客16-购物单最大满意度

分类:动态规划,组合,最大值,装箱问题 知识点: 生成递减数  100, 90, 80, ..., 0   range(100, -1, -10) 访问列表的下标key    for key, value in enumerate(my_list): 动态规划-捆绑装箱问题  a. 把有捆绑约束的物体进行组合,形成唯一的个体 b. 确定动态规划表的含义,即dp[i]表示什么 c.

牛客刷题|HJ20 密码验证合格程序, HJ16 购物单,H17坐标移动

ACM输入输出处理 参考:【python & ACM 输入输出的处理:sys.stdin.readline().strip().split())】_sys.stdin.readline()输入去除掉空格-CSDN博客 line2 = sys.stdin.readline()#读一行a = ' 8dajia8hao8 'b = a.strip()#移除字符串 开头和结尾 的空格或换行符c

2017年省赛第八届蓝桥杯B组C/C++第一题解 购物单

标题:购物单 问题描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。 小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。 现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。 取款机只能提供100元面额的纸币。小明