算法第四章实验报告
作者:互联网
4-1 程序存储问题
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
输入格式:
第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。
输出格式:
输出最多可以存储的程序数。
二.算法描述
#include<bits/stdc++.h> using namespace std; int main() { int n,l; int count =0; //计数器计算存储了几个 cin>>n>>l; int a[n+1]; for(int i = 0;i<n;i++) { cin>>a[i]; } sort(a,a+n);//默认升序 for(int i = 0;i<n;i++) { if(a[i]<=l) { l -=a[i];//l 代表总长 count++; } } cout<<count; return 0; }
三.问题求解
1.贪心算法(贪心策略)
目的是要存储最多的程序,贪心算法策略为利用sort函数对程序占用量进行排序,选择最小的,从最小的开始存储,验证得到最优方案里面一定也包含从最小开始选的方案,说明此策略符合最优解,贪心算法成立。
2.算法解释
利用总长为l,利用数组存储每一个程序占用大小,每存储一个程序,总长l减去对应存储进去程序所需占用的大小,此时计数器count加一,每次循环更新剩余的l的长度,判断是否够存储下一个程序。
四.贪心算法心得体会、
贪心算法总是作出在当前看来最好的选择。
基本思想可以概括为:从问题的某一个初始解出发,向给定的目标推进,每次都做出当前最佳的贪心选择,不断将问题实例归纳为更小的相似子问题。
贪心算法常用于解决最大值或最小值的优化问题。贪心算法能求得最优解的问题一般具有两个重要性质:
贪心选择性质:问题的整体最优解可以通过一系列局部最优的选择达到。这是贪心算法可行的第一个基本要素,也是贪心算法问题和动态规划问题的主要区别。贪心算法通常自顶向下,以迭代的方式做出相继的贪心选择。
最优子结构性质:问题的整体最优解包含子问题的最优解。
标签:存储,磁带,int,程序,算法,实验报告,第四章,贪心 来源: https://www.cnblogs.com/cotton-narco/p/15554204.html