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

应该算是个算法问题

  •  
  •   cambria · 2019-10-10 13:02:23 +08:00 · 1920 次点击
    这是一个创建于 1905 天前的主题,其中的信息可能已经有所发展或是发生改变。

    买东西买出个难题:

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

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

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

    第 1 条附言  ·  2019-10-10 14:31:06 +08:00

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

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

    第 2 条附言  ·  2019-10-10 14:54:46 +08:00

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

    25 条回复    2019-10-10 14:53:41 +08:00
    cambria
        1
    cambria  
    OP
       2019-10-10 13:34:36 +08:00
    目前的猜想是:1A3B 作为一单,多余的 B 每 4 个一单,那么 4A16B 就可以下 5 单( 1A3B * 4,4B * 1 ),综合成本是 211.5/组( 1A4B 为一组),但是不知道怎么抽象成数学问题,以及是否有穷举以外的证明方法。
    chyou3
        2
    chyou3  
       2019-10-10 13:42:37 +08:00 via Android
    并不认为这是个算法问题,这应该是个关于你钱包厚度的问题
    Rekkles
        3
    Rekkles  
       2019-10-10 13:45:04 +08:00
    这个应该是求怎么搭配能达到用半价买商品的一个算法吧 二元二次方程?
    maichael
        4
    maichael  
       2019-10-10 13:48:16 +08:00
    能写成方程就能画图了吧,A 和 B 的数量是有关联的,所以应该可以画出 A 的数量和购买成本的关系图。
    binux
        5
    binux  
       2019-10-10 13:50:54 +08:00
    当然是 A 买 100 个,B 买 400 个单位成本最低了啊
    ayase252
        6
    ayase252  
       2019-10-10 13:57:58 +08:00
    显然,每一单的总价格是 300 的倍数的话单位成本是最低,找一个符合 99a + 75b=300n 的 a,b 作为每单的数量。
    接下来,求下多少单能够满足 4n_a = n_b。
    mainjzb
        7
    mainjzb  
       2019-10-10 13:58:09 +08:00
    因为 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

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

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

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

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

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

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

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

    答案也有了,先按 1A3B 下单 4 次,再 4B 下单一次。
    mainjzb
        24
    mainjzb  
       2019-10-10 14:38:56 +08:00
    最低单价的几种方法就是我列出的
    1A3B *4 + 4B = 174*4 + 150 = 846

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

    4A + 4B * 4 = 246+600=846
    每个都是 5 单,最低凑的都是 4A16B 结果。价格都最低价格。
    cambria
        25
    cambria  
    OP
       2019-10-10 14:53:41 +08:00
    @coderluan 感觉结案了,原来是个动规的问题,受教了。PS:@mainjzb 你的结果是对的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2818 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:02 · PVG 22:02 · LAX 06:02 · JFK 09:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.