首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
宝塔
V2EX  ›  问与答

应该算是个算法问题

  •  
  •   cambria · 39 天前 · 1015 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    买东西买出个难题:

    商品 A,价格 99 元,商品 B,价格 75 元,商家活动每单满 300-150 (可下任意单,自由组合 AB )。

    问题:假设商品需求比例是 A:B = 1:4 (每买 1 个 1 就要买 4 个 B ),在只能购买 AB 两种商品且数量不限制的前提下,怎么下单购买单位成本最低?

    (原以为是个简单问题,却被难住了)

    第 1 条附言  ·  39 天前

    各位大神,这个问题主要问题的不是最低成本是多少,而是如何求出最低成本的几算方法,还请大神们不要跑偏呀~~(试想如果可以套出一个算法,不是在双十一前造福人类的大善举嘛~~)

    PS:题目里说的是每单,不是每满,顺便强调一下撒~~

    第 2 条附言  ·  39 天前

    感觉结案了,感谢 @coderluan,感谢大家。

    25 回复  |  直到 2019-10-10 14:53:41 +08:00
        1
    cambria   39 天前
    目前的猜想是:1A3B 作为一单,多余的 B 每 4 个一单,那么 4A16B 就可以下 5 单( 1A3B * 4,4B * 1 ),综合成本是 211.5/组( 1A4B 为一组),但是不知道怎么抽象成数学问题,以及是否有穷举以外的证明方法。
        2
    chyou3   39 天前 via Android
    并不认为这是个算法问题,这应该是个关于你钱包厚度的问题
        3
    Rekkles   39 天前
    这个应该是求怎么搭配能达到用半价买商品的一个算法吧 二元二次方程?
        4
    maichael   39 天前
    能写成方程就能画图了吧,A 和 B 的数量是有关联的,所以应该可以画出 A 的数量和购买成本的关系图。
        5
    binux   39 天前
    当然是 A 买 100 个,B 买 400 个单位成本最低了啊
        6
    ayase252   39 天前
    显然,每一单的总价格是 300 的倍数的话单位成本是最低,找一个符合 99a + 75b=300n 的 a,b 作为每单的数量。
    接下来,求下多少单能够满足 4n_a = n_b。
        7
    mainjzb   39 天前
    因为 4B = 300 满足唯一满减活动
    显然此题在任何情况下,都能补充到最低价的 B
    问题转为,如果以最低价购买到 A,且 B 能被量化为固定价格 37.5
    满足套餐的优惠情况
    4A 396-150 = 246
    3A1B 375-150 =225
    2A2B 348-150 =198
    1A3B 324-150 =174
    4B 300

    B 能被量化为 37.5,可得每种情况下的 A 价格
    1A3B A=61.5
    2A2B A=61.5
    3A1B A=62.5
    4A A=61.5

    事实证明。。无论你怎么凑单,价格都差不多。
        8
    cambria   39 天前
    @Rekkles 一般方程搞不定,感觉是个线性规划的问题,可惜我不擅长。
        9
    cambria   39 天前
    @ayase252 每一单的 AB 组合都可以不同,按照这个思路,得列出 AB 组合的所有可能才行
        10
    coderluan   39 天前
    这个问题本身有问题啊,单位成本不能作为合算不合适的依据的:

    因为在满 300-150 的前提下,最低单位成本就是 50%了,只要总价能被 300 整除,那样就能得到最低单位成本,直接买 300 件 A,1200 件 B,就满足这个条件了,不需要算法也不需要数学。
        11
    cambria   39 天前
    @mainjzb 在不同的组合中 B 的量化价格是不固定的,4B 的时候是 37.5,3A1B 的时候,总价是 222,B 的量化成本应该是 75/372*222 约等于 44.76
        12
    cambria   39 天前
    @coderluan 300 件 A 1200 件 B 的情况下,如何下单呢?
        13
    mainjzb   39 天前
    1A3B *4 + 4B = 174*4 + 150 = 846

    2A2B *2 + 4B *3 = 198*2 + 150*3 = 846

    4A + 4B * 4 = 246+600=846

    验算一下,显然正确
        14
    cambria   39 天前
    @coderluan 这个问题里不是每满 300-150,而是每单 300-150
        15
    cambria   39 天前
    @mainjzb 但你这个不能满足 A:B = 1:4 呀
        16
    cambria   39 天前
    @mainjzb 抱歉,是我看错了
        17
    mainjzb   39 天前
    1A3B *4 + 4B = 4A16B
    2A2B *2 + 4B *3 = 4A16B
    4A + 4B * 4 = 4A16B
    难道我数学不好?
        18
    cambria   39 天前
    @mainjzb 你这个计算方法说明的是:当总量为 4A16B 的情况下,有多种下单方式可以让总成本为 846,我想问的是,总量变化的情况下,如何得出最低单位成本
        19
    Vegetable   39 天前
    因为是每满 300-150,所以不存在拆单购买比一次购买所有更优惠的情况,最优解无论是怎么组合的,一单买完一定是最优惠的方案之一。

    而最优方案就是半价,总价是 300 的整数倍即可。因为 1:4 且 4b=300,所以无论买多少份,b 都要自己独享对应份数的 300。在这种情况下,只要保证 N 份 A 是半价就可以了。即 NA % 99 = 0 时,总花费必然是半价。

    99 和 300 的最小公倍数是=9900,N=33.
    所以当份数为 33N 的时候,单位成本最低。
        20
    Vegetable   39 天前
    NA % 300 = 0
        21
    Vegetable   39 天前
    @Vegetable 算错了..9900 对应 N 是 100 不是 33..
        22
    mainjzb   39 天前
    问题:假设商品需求比例是 A:B = 1:4 (每买 1 个 1 就要买 4 个 B ),在只能购买 AB 两种商品且数量不限制的前提下,怎么下单购买单位成本最低?
    答:
    4A16B = 846
    所以 1A4B 最低单价就是 211.5
        23
    coderluan   39 天前   ♥ 1
    @cambria 你这么说的话,楼上大家都搞错了,问题也简单了,因为 B 可以四个一组变成搭子 4B,所以问题可以先考虑 A 和 B 怎么组合超过 300 最少,结论是 1A3B,然后再考虑,最少买多少组 1A3B 加上搭子 4B 能满足 1:4 的比例就行了,

    答案也有了,先按 1A3B 下单 4 次,再 4B 下单一次。
        24
    mainjzb   39 天前
    最低单价的几种方法就是我列出的
    1A3B *4 + 4B = 174*4 + 150 = 846

    2A2B *2 + 4B *3 = 198*2 + 150*3 = 846

    4A + 4B * 4 = 246+600=846
    每个都是 5 单,最低凑的都是 4A16B 结果。价格都最低价格。
        25
    cambria   39 天前
    @coderluan 感觉结案了,原来是个动规的问题,受教了。PS:@mainjzb 你的结果是对的。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1549 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    ♥ Do have faith in what you're doing.