合并果子

合并果子

牛客地址:

https://www.nowcoder.com/practice/854e7118eb08464ab8ce7a0bca8b276c?tpId=182&tab=answerKey

在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了N堆。果园是一个二维平面,第i堆果子的位置为(Xi,Yi),重量为Wi。多多决定把所有的果子合成一堆。每一次合并,多多可以消耗Wi (|Xi- Xj|+|Yi- Yj |)的体力把第i堆果子合并到第j堆。可以看出,所有的果子经过N-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。请你求出将所有果子合并成一堆消耗的总体力最少是多少。

样例输入

4
2 1 1
1 2 3
3 1 2
2 4 2

样例输出

14

数据范围

20%   N≤10
60%   N≤1000
100%  N≤100000,Xi,Yi,Wi≤100000

解法一

1、首先需要知道 x x x y y y的体力消耗是相互独立的,所以计算的时候可以将二维的问题,简化为两个以为一维问题,因此后续介绍主要与 x x x方向的计算为例;

2、首先需要明确最优策略为一定是将所有其他果子直接合并到其中一个果堆中,证明如下:

​ 假设存在某一策略需要将两个果堆 i i i j j j合并,然后移动到第 k k k个果堆,令第 i i i个果堆的 x x x坐标为 x i x_i xi,重量为 w i w_i wi,第 j j j个果堆为 x j x_j xj,重量为 w j w_j wj,第 k k k个果堆的 x x x坐标为 x k x_k xk,重量为 w k w_k wk。此时需要消耗的体力 S 1 S_1 S1为:

S 1 = ∣ x i − x j ∣ w i + ( w i + w j ) ∣ x k − x j ∣ S_1=|x_i-x_j|w_i+(w_i+w_j)|x_k-x_j| S1=xix

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值