1、題目名稱:程序存儲問題
2、問題描述:
設有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
3、算法描述:
#include<bits/stdc++.h>
using namespace std;
int n;
int l;
int i;
int a[200];
int length=0;
int sum=0;
int main(){
cin>>n>>l;
for(i=0; i<n; i++){
cin>>a[i];
}
sort(a,a+n);
for(i=0; i<n; i++) {
length+=a[i];
if(length<=l){
sum++;
}
}
cout<<sum;
return 0;
}
4、貪心策略:程序長度越小越好
5、心得體會
貪心算法得到的是局部最優解,不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇。所以能用動態規划求解的問題不一定能用貪心算法求解,但能用貪心算法求解的問題一定能用動態規划求解。貪心算法一般用來解決求最大或最小解。