一 . 实践题目
7-3 程序存储问题
二 . 问题描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
输入格式:
第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。
输出格式:
输出最多可以存储的程序数。
输入样例:
6 50
2 3 13 8 80 20
输出样例:
5
三 . 算法描述
1.贪心策略:
将磁带长度从小到大排好序,设一个sum = L,剩余长度大于即将被减的磁带长度,则将磁带从L中减去,每减一次计数器加一。
2.代码
#include <iostream> #include <algorithm> using namespace std; int main(){ int n, L; cin >> n >> L; int a[n]; for(int i = 0; i < n; i++){ cin >> a[i]; } int num = 0; int sum; sum = L; sort(a, a+n); for(int i = 0; i < n; i++){ if(sum >= a[i]){ sum = sum - a[i]; num++; } } cout << num << endl; return 0; }
四 . 算法时间空间复杂度
时间复杂度:O(nlogn)
调用了快排
空间复杂度:O(n)
一维数组
五 . 心得体会
一开始写的时候我和同伴都忘记了sort函数的头文件,翻了笔记之后加了上去,以后要注意这一点。