算法第四章作业

一、题目名称

程序存储问题 

二、问题描述

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

    cin >> n >> L;

    int a[n];

    for(int i = 0; i < n; i++){

        cin >> a[i];

    }

    sort(a, a + n);

    int num=0,sum = 0;

    for(int i = 0; i < n; i++){

        sum += a[i];

        if(sum <= L){

             num++;

        }else break;

    }

    cout<<num;

}

四、贪心策略

每次添加一个长度最小的程序,从而使磁带上存储尽可能多的程序

五、时间复杂度分析

利用sort函数进行排序,时间复杂度为O(nlogn)遍历数组时间复杂度为O(n),则算法时间复杂度为O(nlogn)

六、对贪心算法的理解

贪心算法又称之为贪婪算法,在考虑问题时,总是做出在当前状况来说最好的算则,而不从整理来考虑。从某种意义上说是局部最优解,贪心算法所得到的答案并不一定是整体最优解,所以在使用贪心算法一定要考虑清楚,是否能使用贪心算法。贪心选择性质时指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得问题最终的选择方案是全局最优的。贪算法是一种改进了的分级处理方法。其核心是根据题意选取一种量度标准。然后将这多个输入排成这种量度标准所要求的顺序,按这种顺序一次输入一个量。如果这个输入和当前已构成在这种量度意义下的部分最佳解加在一起不能产生一个可行解,则不把此输入加到这部分解中。

posted @ 2021-11-16 22:58  刘瑾怡  阅读(35)  评论(0编辑  收藏  举报