python实现最小费用购物问题

问题描述:
商店中每种商品都有标价.例如,一朵花的价格是2元.一个花瓶的价格是5元.为了吸引顾客,商店提供了一组优惠商品价. 优惠商品是把一种或多种商品分成一组,并降价销售.例如,3朵花的价格不是6元而是5元.2个花瓶加1朵花的优惠价是10元.是设计一种算法,计算出某一顾客所购商品应付的最少费用.
参考的知识:动态规划. 程序语言不限.

题目分析:

  1. 首先确定需要哪些数据,要想实现这个题目,我们需要如下几个数据,
    共有多少种优惠方案s_num,每个优惠方案的构成第i种物品需要几 个,并且优惠后价格为多少的一个数据村粗s1,s2,s3等等,优惠方案 组成的列表s。客户需要的商品数量s,以及商品价格p。

2.其次要确定购物最消费的实现目的, 我们的目的是顾客的要求依据商家的优惠规则得出一个最优的优惠组合方案, 然后输出最低价格。

3.算法思想实现如下:通过递归, 我们可以遍历所有的优惠规则, 如果满足优惠规则,那么就会产生一个新的子问题,这个子问题同样是计算当前状态的最小花费情况,需要我们注意的是,优惠规则很有可能是多个的,那么我们在考虑这n个优惠规则时候,产生的n个子问题的最优解加上优惠价格,得到最小值,就是我们所需要的。这个时候就会用到递归去实现。递归停止的条件就是如果所有的优惠规则都不满足则返回剩余商品的按原价得出的总价. 通过这样的思想,我们就可以计算出用户需要的物品的最优优惠方案。

4.状态转移方程式:F(a1,a2,a3,a4,a5)= min{F(a1-s1,a2-s2,a3-s3,a4-s4,a5-s5)+Cost(s)}
在这里插入图片描述

cout = 0
def MinCost(num,p,s):
    global cout
    cost = list()
    tag = 0
    for i in range(s[0]):
        if num[0] >= s[i+1][0][1] and num[1] >= s[i+1][1][1] and num[2
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值