题目描述:
在新手村中,各位勇者需要采集一些果实来制作药剂。time[i]
表示勇者每次采集 1~limit
颗第 i
种类型的果实需要的时间(即每次最多可以采集 limit
颗果实)。
当前勇者需要完成「采集若干批果实」的任务, fruits[j] = [type, num]
表示第 j
批需要采集 num
颗 type
类型的果实。采集规则如下:
- 按
fruits
给定的顺序依次采集每一批次 - 采集完当前批次的果实才能开始采集下一批次
- 勇者完成当前批次的采集后将清空背包(即多余的果实将清空)
请计算并返回勇者完成采集任务最少需要的时间。
解题思路:模拟法
采集果实有几种情况:
一、如果每次采集果实的数量小于背包的容量,那么一次性就可以全部取完,时间也只会消耗一次。
二、如果采集的果实的数量大于背包的容量,那么需要采摘多次才能完成,并且采摘过程要求必须装完这类果实才能开始下一种。因此即使这次背包没有装满也不能装其他类型。
public static int getMinimumTime(int[] time, int[][] fruits, int limit) {
int j=0; //果子种类
int ans=0; //总时间
while(j<fruits.length){
if(fruits[j][1]<limit)
ans+=time[fruits[j][0]];
else{
if(fruits[j][1]%limit!=0){
ans+=time[fruits[j][0]]*(fruits[j][1]/limit+1);
}else{
ans+=time[fruits[j][0]]*(fruits[j][1]/limit);
}
}
System.out.println(ans);
j++;
}
return ans;
}