算法第四章實踐報告
阿新 • • 發佈:2018-11-29
頭文件 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函數的頭文件,翻了筆記之後加了上去,以後要註意這一點。
算法第四章實踐報告