zoukankan      html  css  js  c++  java
  • 第四章上级实践报告

    一、实践题目

      程序存储问题

    二、问题描述

      有给定长度的n个程序要放在长度为L的磁盘上,计算磁盘上最多能装多少个程序

    三、算法描述(说明你的贪心策略,并且参考会场安排问题,利用反证法证明贪心选择和最优子结构性质)

      

      设程序集合E={1,2,3,... ,n }以按程序大小的非减顺序排序,则程序1是其中最小的  

      贪心策略:每次选择当前长度最短的程序放入磁盘

      贪心选择与最优子结构性质:首先必有程序1,不然设A∈E是最优解,且A中最小的程序为k。若k=1,则最优解包含1。若k>1,则活动1必与A中除k以外的程序相容。令B=A-{k}∪{1},则B也是个最优解

                   进一步,若A是原问题的包含程序1的最优解,则A‘=A-{1}是程序集合E'={i∈E:si>f1}的一个最优解

                   不然,设B'是E'的解且|B'|>|A'|,则B'∪{1}是E的解且|B'|+1>|A|。此与A是最优解矛盾。所以必有最短的程序1。

      

    四、算法时间及空间复杂度分析(要有分析过程)

      代码如下:

      

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,l;
    int a[100000];
    
    int main(){
        cin>>n>>l;
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        sort(a,a+n-1);
        int ans=0;
        
        for(int i=0;i<n;i++){
            if(l-a[i]>=0){
                l=l-a[i];
                ans++;
            }
        } 
        cout<<ans;
        return 0;
    }
    View Code

      时间复杂度:进行了一次快排,还有一次对数组的遍历,所以时间复杂度为O(nlogn)

      空间复杂度:只开了一个变量用以记录剩余空间,则空间复杂度为O(1)

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

      这道题比较简单,只要想好贪心策略,证明其正确性,基本就可以迎刃而解了。

  • 相关阅读:
    java的继承---包装器与自动装箱
    linux开机启动过程,很多人说的不太清楚的看看。
    黑盒测试/三角形(OC)
    git 忽略一些文件的提交
    volley 框架的使用
    如何通过阿里百川的集成,以及manifest的权限配置完成淘客商品详情页的链接
    抓取网站访问者的QQ号码
    写写东西吧
    Android 强制实现下线功能
    Android 新闻显示界面且适应平板
  • 原文地址:https://www.cnblogs.com/hxyawsl/p/11884424.html
Copyright © 2011-2022 走看看