• 《算法设计与分析》--第四章上机实践报告


    实践题目:4-1程序存储问题

    问题描述:

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

    输入格式:

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

    输出格式:

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

    输入样例:

    在这里给出一组输入。例如:

    6 50 
    2 3 13 8 80 20
    

    输出样例:

    在这里给出相应的输出。例如:

    5

    算法描述

        先对程序进行从小到大排序,然后依次放入磁带直到放不下。

        证明:假设最优解有{x2,x4},而x1 < x2,那么把x2换成x1组成的解{x1,p4},放入的程序数不变而且也满足题意,所以{p1,p4}也是一组最优解,该算法即贪心算法正确。

        以下是ac代码

      

    #include <iostream>    
    #include <algorithm>
    using namespace std;
    
    int main(){
        int n, m;
        cin >> n >> m;
        
        int* a = new int[n];
        
        for(int i = 0; i < n; i++)
            cin >> a[i];
            
        sort(a, a + n);
        int sum = 0;
        int flag = 0;
        for(int i = 0; i < n; i++){
            sum = sum + a[i];
            if(sum <= m) flag++;
            else break;
        }
        cout << flag;
        return 0;
    }
    View Code

    算法时间及空间复杂度分析

        时间复杂度:排序O(nlogn),判断程序能否放入磁带O(n),所以时间复杂度为O(nlogn)

        空间复杂度:开了一个变量记录已放程序的总空间,空间复杂度为O(1)。

    心得体会

      我觉得第一题的并不是很难,就是启发式算法想一下就ok,不过要注意细节上的问题,如数组越界,永真循环等问题。还要自己的思维锻炼也很重要,贪心算法也需要自己证明出来的。

      多打代码

     

    认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
  • 相关阅读:
    Python pandas 入门 05 JSON
    Python matplotlib 画图入门 07 散点图
    Python matplotlib 画图入门 06 绘制多图
    Python pandas 入门 04 CSV 文件
    Python pandas 入门 01 安装
    Python 入门示例系列 35 迭代器与生成器
    Python matplotlib 画图入门 03 绘图线
    Python pandas 入门 目录
    Python 零散知识点琐碎知识
    Python numpy 入门系列 目录
  • 原文地址:https://www.cnblogs.com/jyf2018/p/11877704.html
Copyright © 2020-2023  润新知