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

演算法第四章實踐報告

一、實踐題目

 

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

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

 

二、問題描述

 

給一個大小為 l 的容器,給出 n 件物品的重量,儘可能多的拿走。

 

 

三、演算法描述

 

從小到大排序一遍之後,一直拿取直到放不下為止。

 

程式碼如下:

#include <iostream>
#include <algorithm>
using namespace std;
int n,l; int ans = 0; int w[1005]; int main(){ scanf("%d %d", &n, &l); for(int i = 0; i < n; ++i){ scanf("%d", &w[i]); } sort(w, w+n); for(int i = 0; i < n; ++i){ if(l-w[i]>=0){ l -= w[i]; ++ans; } } printf(
"%d", ans); return 0; }

 

四、演算法時間及空間複雜度分析(要有分析過程)

 

時間複雜度:O(N*logN)

輸入:N

sort排序:N*logN

選取物品:N

空間複雜度:O(N)

 

五、心得體會(對本次實踐收穫及疑惑進行總結)

在跟隊友做7-2的時候提出了很多想法,首先想到去掉最大的,想了一下之後直接排除了。然後得出了正確的結論,但是,我們選用了字串去處理,第一次處理不當,忘記處理前導零導致了錯誤。