第四章上机实践报告

  1. 实践题目:程序存储问题 

  2. 问题描述:设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

  3. 算法描述(说明你的贪心策略,并且参考会场安排问题,利用反证法证明贪心选择和最优子结构性质):利用贪心算法,每次都选择当前最小的程序,当剩余空间不足放入当前最小的程序,则结束。

  4. #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int main(){
    	int n,L;
    	cin>>n>>L;
    	int a[n];
    	for(int i=0;i<n;i++){
    		cin>>a[i];
    	}
    	sort(a,a+n);
    	int sum =0;
    	int count=0;
    	for(int i=0;i<n;i++){
    		if(a[i]<=L-sum){
    			sum+=a[i];
    			count++;
    		}
    	}
    	cout<<count<<endl;	
    	return 0;
    }
    

      

  5. 算法时间及空间复杂度分析(要有分析过程):时间复杂度sort排序(nlogn),贪心算法(n),空间复杂度o(1),开辟常数级的空间

  6. 心得体会(对本次实践收获及疑惑进行总结):

    if(a[i]<=L-sum){
    			sum+=a[i];
    			count++;
    		}
    

      这个if 条件一开始写的是a[i]<=L&&sum<=L
    虽然过了pta,但是逻辑是错的,以后要好好想清楚逻辑,即使可能过。

posted @ 2019-11-15 21:20  Kayee1802  阅读(92)  评论(0编辑  收藏  举报