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