算法第四章实验报告

 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的长度,判断是否够存储下一个程序。

 四.贪心算法心得体会、

贪心算法总是作出在当前看来最好的选择。

基本思想可以概括为:从问题的某一个初始解出发,向给定的目标推进,每次都做出当前最佳的贪心选择,不断将问题实例归纳为更小的相似子问题。

贪心算法常用于解决最大值或最小值的优化问题。贪心算法能求得最优解的问题一般具有两个重要性质:

贪心选择性质:问题的整体最优解可以通过一系列局部最优的选择达到。这是贪心算法可行的第一个基本要素,也是贪心算法问题和动态规划问题的主要区别。贪心算法通常自顶向下,以迭代的方式做出相继的贪心选择。
最优子结构性质:问题的整体最优解包含子问题的最优解。

posted @ 2021-11-15 00:29  Cotton-Narco  阅读(64)  评论(0编辑  收藏  举报