题目描述
设有 n 个程序 { 1 , 2 , 3 , … , n } 要存放在长度为 L 的磁带上。程序i存放在磁带上的长度是 li , 1 ≤ i ≤ n 。要求确定这 n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。
输入格式
输入数据中,第一行是 2 个正整数,分别表示程序文件个数和磁带长度L。接下来的 1 行中,有 n 个正整数,表示程序存放在磁带上的长度。
输出格式
输出为最多可以存储的程序个数。
输入样例
6 50
2 3 13 8 80 20
输出样例
5
/**
* @param n 程序文件个数
* @param l 磁带长度
* @param spaces 每个程序存放在磁带上的长度
* @return
*/
public static int store(int n, int l, int[] spaces) {
Arrays.sort(spaces);// 直接用JDK的排序算法,如果不能用就自己写
int total = 0, num = 0;
for (int i = 0; i < spaces.length; i++) {
int space = spaces[i];
if (total + space < l) {
total += space;
num++;
} else break;
}
return num;
}
// 测试
public static void main(String[] args) {
int n = 6, l = 50;
int[] spaces = {2, 3, 13, 8, 80, 20};
int num = store(n, l, spaces);
System.out.println(num);
}