1. 程式人生 > >算法第4章實踐報告

算法第4章實踐報告

ret 第一個 ng- 要求 min include spa view 時間復雜度

1、實踐題目

7-3 程序存儲問題 (90 分)

2、問題描述

設有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
3、算法描述 即最短程序優先,先將給出的n個程序排序,然後從第一個最小的開始存放,保證可存儲的程序數最大。 #源代碼
#include<iostream>
#include <algorithm>
using namespace std;


int main(){
    int a[100];
    int n,L;
    cin>>n>>L;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a,a+n);
    
int j=0,sum=0; while(j<n){ sum=sum+a[j]; if(sum<=L)j++; else{break;} } cout<<j; return 0; }

4、算法時間及空間復雜度分析(要有分析過程)

時間復雜度:因為調用快排,為O(nlogn)

空間復雜度:O(n)

5、心得體會

這道題我在敲的過程中最開始把"cout<<j"放入了上面的while循環中,導致一直有一個樣例過不去,經過與同伴仔細分析後,我們發現這樣會使得當所有程序剛好存放時會沒有輸出,我們當即改正,大大提高了效率。

算法第4章實踐報告