应该算是个算法问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cambria
V2EX    问与答

应该算是个算法问题

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

    买东西买出个难题:

    商品 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     Solana     5301 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:40 PVG 16:40 LAX 00:40 JFK 03:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86