leetcode 1710. Maximum Units on a Truck(卡车上最大的units)

You are assigned to put some amount of boxes onto one truck. You are given a 2D array boxTypes, where boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi]:

numberOfBoxesi is the number of boxes of type i.
numberOfUnitsPerBoxi is the number of units in each box of the type i.
You are also given an integer truckSize, which is the maximum number of boxes that can be put on the truck. You can choose any boxes to put on the truck as long as the number of boxes does not exceed truckSize.

Return the maximum total number of units that can be put on the truck.

Example 1:

Input: boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
Output: 8
Explanation: There are:

  • 1 box of the first type that contains 3 units.
  • 2 boxes of the second type that contain 2 units each.
  • 3 boxes of the third type that contain 1 unit each.
    You can take all the boxes of the first and second types, and one box of the third type.
    The total number of units will be = (1 * 3) + (2 * 2) + (1 * 1) = 8.

boxTypes[i] = [这种类型box的数量,这种类型每个box占的unit],
卡车上最多可放truckSize个box,
问最大可放多少unit

思路

简单的背包问题,包里最多放truckSize个box, 只限制box的数量,不限制容量,
那当然是先挑unit多的box往里放了,
box按unit排序,先放unit多的,后放少的。

public int maximumUnits(int[][] boxTypes, int truckSize) {
    int res = 0;
    int num = 0;
    Arrays.sort(boxTypes, (a, b)->(b[1] - a[1]));
    
   for(int[] box : boxTypes) {
       if(truckSize <= 0) break;
       
       if(truckSize >= box[0]) res += box[0] * box[1];
       else res += truckSize * box[1];
       
       truckSize -= box[0];
   }
    
    return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值