第四章算法实践
题目:
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
算法描述:
签到题,只需要将各个文件从小到大排序,并拿一个变量存储已占用的容量总和,进行对比即可得到结果。
#include<bits/stdc++.h> #include<algorithm> using namespace std; #define MAXLENGTH 1000 int interger[MAXLENGTH]; int main() { int num,length; int sum = 0; int counter = 0; int m = 0; cin>>num>>length; for(int i=0;i<num;i++){ cin>>interger[i]; } sort(interger,interger+num); while(true){ if(sum+interger[m]>length||counter==num) break; sum+=interger[m]; counter++; m++; } cout<<counter<<endl; return 0; }
1.4 算法时间及空间复杂度分析:
整体算法上看,输入需要O(n)的时间进行输入,最快用O(nlogn)的时间复杂度进行排序,使用O(n)的时间进行结果叠加,总时间复杂度为O(nlogn),时间复杂度花费在排序上。
空间上,只需要一个临时变量存储当前占用容量总和即可