程序存储问题
问题描述:设有n 个程序{1,2,…, n }要存放在长度为 的磁带上。程序i存放在磁带上的长度是 ,。程序存储问题要求确定这 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。对于给定的 个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。
思路:
根据程序长度进行非降序排序,接着遍历l数组,判断每一段l[i]是否小于L,小于则count++,L -= l [i]
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, L, count = 0; //n:程序数 L:磁带长度 count:用来计数
cin >> n >> L;
int l[n]; //存储程序长度
for(int i = 0; i < n; i++)
cin >> l[i];
sort(l, l + n); //非降序排序
for(int i = 0; i < n; i++)
{
if(l[i] <= L)
{
count++;
L -= l[i];
}
else
break;
}
cout << count << endl;
return 0;
}
/*
测试:
6 50
2 3 13 8 80 20
运行结果:
5
*/