算法第四章上机实践报告

一、实践题目

 

 

 

二、问题描述

通过合理地选择安排程序,使长度一定磁带上存储尽可能多的程序,求最多可以存储的程序数。

 

三、算法描述

贪心策略就是要优先选长度更短的程序。

证明:三个程序长度分别为a,b,c,其中a>b>c;

       (1)如果a>=b+c那么我们肯定是不选a,而是去选b和c。

       (2)如果a<b+c,就是在长度a以内最多只能存储1个程序,那么此时我们选择更短的程序来使剩下的长度更多尽可能存储更多的程序。

         这样我们就能贪心得到解决方案。

 

AC代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int main(){
 5     int n,m;
 6     cin>>n>>m;
 7     int a[n];
 8     for(int i = 0; i < n; i++) {
 9         cin>>a[i];
10     }
11     sort(a,a+n);
12     int p = 0, count = 0;
13     for(int i = 0; i < n; i++) {
14         count += a[i];
15         if(count <= m) {
16             p++;
17         }
18     }
19     cout<<p<<endl;
20     return 0;
21 } 
View Code

 

 

四、算法时间及空间复杂度分析

时间复杂度:sort——O(nlogn),for——O(n),总的也是O(nlogn)。

空间复杂度:一个数组O(n)。

 

五、心得体会

很好的复习熟练了贪心算法,增强了和队友一起敲代码的能力,期待下一次实验。

posted on 2019-11-17 13:23  maskkkk  阅读(160)  评论(0)    收藏  举报

导航