【实践报告】算法第四章实践报告


实践报告任选一题进行分析。内容包括:

    1. 实践题目

    2. 问题描述

    3. 算法描述

    4. 算法时间及空间复杂度分析(要有分析过程)

    5. 心得体会(对本次实践收获及疑惑进行总结

1.实践题目:

7-3 程序存储问题

2.题目描述

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

输入格式:

第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。

输出格式:输出最多可以存储的程序数。

3.算法描述

  我们采用贪心算法,先将文件按需要的长度排序,再按从小到大的顺序放入磁带,直到放不进去为止。

4.算法时间及空间复杂度

  整道题目的时间复杂度最高的就是在排序的那一步,我们利用快排,复杂度为o(nlogn),其他步骤用到的都是只有单重循环,所以算法的时间复杂度为o(nlogn)。

  题目中没有用到递归等,空间复杂度为o(1)。

5.心得体会

  我觉得结对编程真的很棒,队友互相讨论一起解决问题,真的很棒。谢谢我的队友菲菲。

6.代码

#include<iostream>
#include <algorithm>
using namespace std;
int main(){
int n,l;
cin>>n>>l;
int a[n+2];
int count=0;
int inl=0;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if((l-inl)>=a[i]){
inl+=a[i];
count++;
}
else break;
}
cout<<count;
}

 

猜你喜欢

转载自www.cnblogs.com/lhiscute/p/10054840.html