zoukankan      html  css  js  c++  java
  • 算法第四章实践报告

    1.实践题目:

    程序存储问题

    2.问题描述:

    设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序

    在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,

    计算磁带上最多可以存储的程序数。

    3.算法描述:

    #include <iostream>
    #include <algorithm>
    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;
    for(int i=0;i<n;i++){
    if (a[i]<=l){
    num++;
    l=l-a[i];
    }
    }
    cout<<num<<endl;
    return 0;
    }

    要计算磁带上最多可以存储的程序数,选择贪心算法计算,首先考虑把最小的程序放进去,以求剩余磁带长度能够存放更多的程序

    所以把程序先按照长度从小到达排序,然后把依次比较程序和磁带(剩余)长度的大小,来决定这个程序能不能放进去,若能够放,

    则计数器加一,若不能则跳出for循环,输出计数器的大小,即为所求。

    4.算法时间复杂度:O(nlogn)

    运用了sort()排序

    算法空间复杂度:O(n)

    运用了一维数组。

    5.心得体会:

    首先要弄清楚,这个问题的最优解能不能够通过局部最优解得出,然后考虑用怎样的贪心选择能够获得局部最优解。

  • 相关阅读:
    Leetcode Unique Binary Search Trees
    Leetcode Decode Ways
    Leetcode Range Sum Query 2D
    Leetcode Range Sum Query
    Leetcode Swap Nodes in Pairs
    Leetcode Rotate Image
    Leetcode Game of Life
    Leetcode Set Matrix Zeroes
    Leetcode Linked List Cycle II
    CF1321A
  • 原文地址:https://www.cnblogs.com/yelimin/p/10043779.html
Copyright © 2011-2022 走看看