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

算法第四章實踐報告

頭文件 code 維數 計數器 程序存儲問題 end 實踐 return ios

一 . 實踐題目

7-3 程序存儲問題

二 . 問題描述

設有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

三 . 算法描述

1.貪心策略:

將磁帶長度從小到大排好序,設一個sum = L,剩余長度大於即將被減的磁帶長度,則將磁帶從L中減去,每減一次計數器加一。

2.代碼

#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];
    }
    int num = 0;
    
int sum; sum = L; sort(a, a+n); for(int i = 0; i < n; i++){ if(sum >= a[i]){ sum = sum - a[i]; num++; } } cout << num << endl; return 0; }

四 . 算法時間空間復雜度

時間復雜度:O(nlogn)

調用了快排

空間復雜度:O(n)

一維數組

五 . 心得體會

一開始寫的時候我和同伴都忘記了sort函數的頭文件,翻了筆記之後加了上去,以後要註意這一點。

算法第四章實踐報告