算法实践报告第四章
1.实践题目名称
4-1 程序存储问题
2.问题描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。程序存储问题要求确定这n 个程序 在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
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 sum = 0; int count = 0; for(int i=0; i<n; i++){ if(sum<L){ if(a[i]<=L-sum){ sum += a[i]; count++; } } } cout<<count; return 0; }
要在规定长度的宽带上放尽可能多的程序,根据贪心策略,则需要先将长度较小的程序都放进去。
只要放进去的长度较小的程序足够多,则能够取到最优解。
设sum为当前宽带中存入的程序长度,count为存入的程序数。
在运用sort排序后,在for循环中按顺序存入长度较小的程序,并同时更新sum和count。
4.算法时间复杂度分析
因为主要计算量在于将程序长度从小到大的排序,所以算法所需的计算时间为O(nlogn)。
5.心得体会
贪心策略是通过一系列局部最优解的选择来获得整体的最优解,在做题时我们应先确定其是否具有贪心性质,再针对性根据问题来做出贪心选择即可。
posted on 2021-11-11 15:59 Russell_0221 阅读(36) 评论(0) 收藏 举报
浙公网安备 33010602011771号