算法第四章上机实验报告
算法第四章上机实验报告
计科2001 刘千愉 20201003146
一、题目描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
二、算法描述
贪心选择:每次选择不超过剩余磁盘长度的最小的程序。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,L;
cin>>n>>L;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int num=0;
for(int i=0;i<n;i++){
if(a[i]<=L){
num++;
L-=a[i];
}else{
break;
}
}
cout<<num;
return 0;
}
三、时间复杂度和空间复杂度
T(n)=O(nlogn) 空间:O(n)
四、对贪心算法的理解
贪心算法是只考虑下一步的最优解,找出局部最优方案,不一定是全局最优方案,所以在选择贪心策略时要进行推理论证,使局部最优解就是全局最优解
五、心得体会
贪心策略不止一种,但是不是每个贪心策略的局部最优解就是全局最优解,所以要经过论证后,把符合条件的贪心策略确定下来再开始着手写代码;还要注意动态规划和贪心算法的使用区别