房间收纳
Description
对于零落的玩具,你需要进行收纳,为了将最多的玩具进行收纳,请你合理分配收纳柜和房间数量。
请你将一些玩具收纳在一个房间中,给你一个二维数组 roomTypes,其中的roomTypes[i] = {numberOfBoxes_i, numberOfUnitPerRoom_i}
- numberOfBoxes_i 是类型 i 的收纳柜的数量;
- numberOfUnitPerRoom_i 是类型 i 的收纳柜可以收纳的玩具数量;
整数roomSize表示房间中可以放下的收纳柜的最大数量。只要箱子数量不超过 roomSize,你就可以选择任意收纳柜放到房间中。
返回房间可以收纳的玩具最大总数。
提示:
(1)1 ≤ roomTypes.length ≤ 1000
(2)1 ≤ numberOfBoxes_i, numberOfUnitPerRoom_i ≤ 1000
(3)1 ≤ roomSize ≤ 10^6
Input
第 1 行输入收纳柜种类数目 n;
第 2 到第 n+1 行输入第 i 个收纳柜的数量及当前收纳柜可以收纳的玩具数量(即二维数组 roomTypes),每行两个数之间用空格隔开;
第 n+2 行输入房间可以放下的收纳柜总数量;
如:
3
1 3
2 2
6 1
4
Output
输出最大收纳的玩具数量(整数),如:
7
Sample
代码
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int roomN[] = new int[n];int roomC[] = new int[n];for(int i = 0;i<n;i++){roomN[i] = scanner.nextInt();roomC[i] = scanner.nextInt();}int capacity = scanner.nextInt();//排序for(int i = 0;i<n-1;i++)for(int j = i+1;j<n;j++){if(roomC[i]<roomC[j]){int tempN = roomN[i];roomN[i] = roomN[j];roomN[j] = tempN;int tempC = roomC[i];roomC[i] = roomC[j];roomC[j] = tempC;}}//收纳的玩具数量int count = 0;//开始计数的序号int number=0;//容量int c = 0;while(c<capacity&&number<n){if(roomN[number]>0){count+=roomC[number];c++;roomN[number]--;}else {number++;}}System.out.println(count);}
}
思路
贪心法解决,首先排序,排序的时候两个数组同时交换
其次不断添加roomC即可