第四章实践


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

1.实践题目

7-3 程序存储问题 (90 分)

2.问题描述

设有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

 

3.算法描述

本题题目要求存储尽可能多的程序数,根据贪心算法的思想不难解决,其实问题实质就是将程序的大小排序后,将尽可能多的程序放入磁带中,也就是先将小的放进磁带中,直到磁带放不下了,就停止,之后输出所存取的程序数。

实现代码:

#include<iostream>
#include<algorithm>
using namespace std;
int a[1001],n,m;
int num=0;
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
m -= a[i];
if(m>=0){
num++;
}
else break;
}
cout<<num<<endl;
return 0;
}

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

本题中算法复杂度为O(n)

根据代码:

for(int i=0;i<n;i++){
m -= a[i];
if(m>=0){
num++;
}

本题所需要计算量也只有此次循环,所以时间复杂度为O(n)

本题解的算法空间复杂度也为O(n),即为存储程序量的数组,后排序,也是原地排序,所以无需额外申请多余的空间;

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

虽然本题目较为简单,多加思考其实在几分钟内便能完成,所以本题最大的收获就是对贪心算法策略的进一步了解以及认识的加深,之后会通过更多的题目去锻炼自己对贪心算法的了解的!

转载于:https://www.cnblogs.com/pppeng/p/10053808.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值