434
社区成员
发帖
与我相关
我的任务
分享1、请说明作业三”程序存储问题“的贪心策略,并用反证法证明满足贪心选择性质,并给出时间复杂度分析
#include<iostream>
#include<algorithm>
#define MAX 10000
using namespace std;
int main()
{
int a[MAX];
int n,l;
cin>>n>>l;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int sum =0;
int k = 0;
for(int i=0;i<n;i++)
{
sum += a[i];
if(sum <= l)
{
k++;
}
else break;
}
cout<<k;
return 0;
}
贪心策略:选择尽可能少占用位置的程序,直到不能再放进程。
反证法:设当前最优解为A,不包括最短的程序,而当前最优解A与真正的最优解B有|A|<=|B|,与最优解矛盾。所以贪心选择应该选每次最短的程序。
时间复杂度:排好序后,最多遍历全部数组,时间复杂度为O(n)。
2、你对贪心算法的理解
根据题目来,尽可能找最多的子结构。还要有一定的数理基础,知道怎么样最多/最少的满足题目。