zoukankan      html  css  js  c++  java
  • 《算法设计与分析》--第四章上机实践报告

    实践题目: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,不过要注意细节上的问题,如数组越界,永真循环等问题。还要自己的思维锻炼也很重要,贪心算法也需要自己证明出来的。

      多打代码

     

    认清现实,放弃幻想。 细节决定成败,心态放好,认真学习与工作。
  • 相关阅读:
    The model backing the 'XXX' context has changed 错误
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
    每日总结9.11
    setTextColor的几个注意事项
    selector使用注意事项
    每日总结9.9
    android popWindow使用注意事项
    有关TextView的drawaleTop属性
  • 原文地址:https://www.cnblogs.com/jyf2018/p/11877704.html
Copyright © 2011-2022 走看看