演算法訓練 程式儲存問題

2021-10-08 18:20:07 字數 1611 閱讀 1738

設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1≤i≤n。 程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案, 使得能夠在磁帶上儲存盡可能多的程式。 對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。

輸入格式:

第一行是2 個正整數,分別表示檔案個數n和磁帶的長度l。接下來的1行中,有n個正整數,表示程式存放在磁帶上的長度。

輸出格式:

輸出最多可以儲存的程式數。

輸入樣例:

6 50 

2 3 13 8 80 20

輸出樣例:

5
解題思路:將輸入資料從小到大依次相加,直到資料長度大於磁帶長度時,結束迴圈,輸出所加的資料個數。

重點要解決對輸入資料的排序問題,掌握sort()函式在陣列,動態陣列vector,集合set以及map中的用法;

知識乾貨——sort()函式

1.sort函式包含於標頭檔案#include中

2.功能:實現對資料的排序

3.使用:

void sort (randomaccessiterator first, randomaccessiterator last, compare comp);

first:所排序陣列的首位址;

last:所排序陣列的結束位址;

comp:排序方法,如果不寫,預設為從小到大排序;

(注意:sort函式在使用時,最後乙個位址所對應的數是不取的,因此這也是一維陣列last尾位址要多寫一位的原因,而對於vector,set,map這些帶有尾指標的容器來說,尾指標不含資料對排序無影響。)

舉例:一維陣列中sort()的使用:

#include

#include

using

namespace std;

intmain()

;sort

(a, a +10)

;//※ a,a+1.a+2 ……a+9為要排序的10個資料的位址,a+10為結束位址

for(

int i=

0; i<

10;i++

)}

執行結果:

此題完整**如下:

#include

using

namespace std;

intmain()

sort

(v.begin()

, v.

end())

;int count=

0, sum =0;

for(

int i =

0; i

printf

("%d"

, count)

;}

演算法 (貪心演算法) 程式儲存問題

description 設有n 個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是 li,1 i n。程式儲存問題要求確定這n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。對於給定的n個程式存放在磁帶上的長度,計算磁帶上最多可以儲存的程式數。input 第一行是2 個正...

程式儲存問題

設有n個程式要存放在長度為l的磁帶上。程式i存放在磁帶上的長度是li,1 i n。要求確定這n個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。輸入資料中,第一行是2個正整數,分別表示程式檔案個數和磁帶長度l。接下來的1行中,有n個正整數,表示程式存放在磁帶上的長度。輸出為最多可以儲...

演算法訓練 排列問題

問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約定 n 10,k 500000 輸入格式 第一行為n和k,...