或许类似背包问题的题,抛砖引玉,期待大神指点(python)

本文探讨一个衣物选择优化问题,类似于01背包问题,要求在限定总价格和总件数的条件下,选出价值最大的衣物组合。作者提出一种解法,但认为存在效率问题,希望能引发更多高效解决方案的讨论。文中提供了样例输入和期望输出,以辅助理解问题和解法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2020小红书,前两道很快做出来了,但是第三题考试的时候没做出来,当时满脑子都觉得跟01背包特别像,但是本来掌握的也不是很好,没能成功套上去。

这会写了一种解法,感觉已经不是动态规划了,而且for循环过多。希望抛砖引玉,学习更好的解法。

题目是一共N件衣服,每件有价格和价值两个属性,限定荷包(总价格不能超过B)和衣柜(总件数不能超过S),求价值最大的方案,如果价值最大有几个方案,取其中价格最低的,如果还相同,取衣服件数少的。

 

思路:本来是想前i件取j件,然后用一个tuple保存当前最大价值及对应的价格,但是考虑到取下一件的时候,对i-1,j-1的情况,可能最大价值下的价格加当前价格会超,但是取另外j-1件就不超,且价值会大于不取当前的策略,所以还是准备用三维数组,保存前i件取j件且价格为k时的价值。后续除了取第一件的时候会在原来价值0的基础上做,其他的需要k循环时检测,价值0的就不考虑了

 

import sys
N,B,S = list(map(int,input().split()))
P = [0]*N
V = [0]*N
for i in range(N):
    inputline = list(map(int,input().split()))
    P[i],V[i] = inputline

# 特例,只要找一件衣服
if S==1:
    res = [0,0]
    for i in range(N):
        if P[i] < B and V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值