算法第四章作业
1.对贪心算法的理解:
所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心策略适用的前提是:局部最优策略能导致产生全局最优解。实际上,贪心算法适用的情况很少。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。
设有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
代码如下:
#include <iostream>
#include<algorithm>
using namespace std;
int main(){
int n,L;
cin>>n>>L;
int num[n];
int x=0,k=0;
int temp;
for(int i=0;i<n;i++){
cin>>num[i];
}
sort(num,num+n);
for(int i=0;i<n;i++){
if((x+num[i])<=L){
x=x+num[i];
k++;
}
}
cout<<k<<endl;
return 0;
}
//此题的贪心策略是优先选择长度最小的程序进行存储,以达到存储最多程序的目的。
而每一次选择长度最小的程序存储时总能保证此次选择的最优解包含在最终解的最优解当中。
3.本章贪心算法学习中遇到的问题主要在于贪心策略的选择,贪心算法的思想还算理解,如果能选择正确的贪心策略,就能较易得到解题思路。结对编程情况良好,两个结对伙伴之间的默契逐渐挺高,往往能从另一个方面看到题目的解题可能,在打代码能力提升过程中也增加了友谊。