算法第4章实践报告

  算法第4章实践报告

  1. 实践题目

  2. 程序存储问题
  3. 问题描述

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

  6. 将n个程序的长度又小到大排序并放在数组中
  7. 设置整数型变量K,从数组第一个开始相加,直到K比L大为止,定位最后一个加到K的数在数组的位置,则计算磁带上最多可以存储的程序数即为该数组所在位置减1.
  8. 算法时间及空间复杂度分析(要有分析过程)

  9. #include<iostream>
    #include<algorithm>
    using namespace std;
    bool cmp(int a,int b){
    return a<b;
    }
    int main(){
    int n,m;
    int nums[100];
    cin>>n>>m;
    if(n==0) cout<<0;
    for(int i=0;i<n;i++){                  //时间复杂度为O(n)
    cin>>nums[i];
    }
    sort(nums,nums+n,cmp);       //O(nlogn)
    int k=0;
    for(int i=0;i<n;i++){                 //O(n)
    k+=nums[i];
    if(k>m) {
    cout<<i;
    break;
    }
    if(k<=m&&i==(n-1))
    cout<<n;
    }
    return 0;
    }

  10. 所以此题时间复杂度=O(nlogn)
  11. 心得体会(对本次实践收获及疑惑进行总结)

  12. 注意临界点,切勿粗心,多看多打代码。
posted @ 2018-12-02 18:31  宇洁  阅读(97)  评论(0编辑  收藏  举报