博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章实践
阅读量:5282 次
发布时间:2019-06-14

本文共 1046 字,大约阅读时间需要 3 分钟。


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

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

你可能感兴趣的文章
rotate the clock
查看>>
bugku 变量
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
CF461B Appleman and Tree
查看>>
CF219D Choosing Capital for Treeland
查看>>
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>