算法第四章实践报告

  

4-1 程序存储问题 

 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

输入格式:

第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。

输出格式:

输出最多可以存储的程序数。

 

解题思路:

按照程序长度从小到大进行存放,sum记录当前存放程序总长度,count记录已存放程序数量,直至sum超过磁带容量

代码实现:

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n, L;
    int a[2000];
    cin >> n >> L;
    for (int i=0; i<n ; i++){
        cin >> a[i];
    }
    sort(a,a+n);
    int sum = 0, count = 0;
    for (int i=0; i<n ; i++){
         sum += a[i];
         if (sum > L) break;
         count++;
    }
    cout << count;
    return 0;
}

 

算法分析:

时间复杂度:sort函数时间复杂度为n*log2n,遍历数组为n,所以时间复杂度为n*log2n。

 

对贪心算法的理解:

贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。
贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。贪心策略要无后向性,也就是说某状态以后的过程不会影响以前的状态,至于当前状态有关。
贪心算法是对某些求解最优解问题的最简单、最迅速的技术。某些问题的最优解可以通过一系列的最优的选择即贪心选择来达到。但局部最优并不总能获得整体最优解,但通常能获得近似最优解。
在每一部贪心选择中,只考虑当前对自己最有利的选择,而不去考虑在后面看来这种选择是否合理。

posted @ 2021-11-16 00:13  来颗泡椒  阅读(30)  评论(0编辑  收藏  举报