算法第四章上机实验报告

算法第四章上机实验报告

计科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)

四、对贪心算法的理解

贪心算法是只考虑下一步的最优解,找出局部最优方案,不一定是全局最优方案,所以在选择贪心策略时要进行推理论证,使局部最优解就是全局最优解

五、心得体会

贪心策略不止一种,但是不是每个贪心策略的局部最优解就是全局最优解,所以要经过论证后,把符合条件的贪心策略确定下来再开始着手写代码;还要注意动态规划和贪心算法的使用区别

posted @ 2021-11-13 22:08  是小七  阅读(28)  评论(0编辑  收藏  举报