算法第四章上机实践报告
Posted xxnjwz-9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第四章上机实践报告相关的知识,希望对你有一定的参考价值。
1、实践题目
设有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
2、问题描述
求磁带最多可以存放多少个程序,尽量把长度短的程序放入磁带。
3、算法描述
#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];
}
sort(a,a+n);
int l=0,count=0;
for(int i=0;i<n;i++){
if((l+a[i])<=L){
l=l+a[i];
count++;
}
else {break;}
}
cout<<count;
}
贪心策略是先把长度短的程序放进磁带,再放长的。(把程序按从小到大的顺序排列,在从第一个开始按顺序一个个放入磁带)
反证法证明:假设最优解不包含长度最短的程序,把这个长度最短的程序和最优解中任何一个程序对调,得出的结果还是最优解,因此假设不成立,长度最短的程序应该在最优解中,贪心策略是正确的。
4、算法时间及空间复杂度分析
时间复杂度sort排序O(nlogn),贪心算法O(n)(只有一层for循环)
空间复杂度T(1)
5、心得体会
写
for(int i=0;i<n;i++){
if((l+a[i])<=L){
l=l+a[i];
count++;
}
else {break;}
}
的时候一开始没有=L,忽略了大小刚好等于的情况。还有排序数组的时候,一开始是自己写代码排序,没有用sort方法。
以上是关于算法第四章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章