算法第四章实践报告

一、实践题目

 

7-3 程序存储问题 (90 分)

设有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

 

二、问题描述

 

给一个大小为 l 的容器,给出 n 件物品的重量,尽可能多的拿走。

 

 

三、算法描述

 

从小到大排序一遍之后,一直拿取直到放不下为止。

 

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
int n,l;
int ans = 0;
int w[1005];
int main(){
    scanf("%d %d", &n, &l);
    for(int i = 0; i < n; ++i){
        scanf("%d", &w[i]);
    }
    sort(w, w+n);
    for(int i = 0; i < n; ++i){
        if(l-w[i]>=0){
            l -= w[i];
            ++ans;
        }
    }
    printf("%d", ans);
    return 0;
}

 

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

 

时间复杂度:O(N*logN)

输入:N

sort排序:N*logN

选取物品:N

空间复杂度:O(N)

 

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

在跟队友做7-2的时候提出了很多想法,首先想到去掉最大的,想了一下之后直接排除了。然后得出了正确的结论,但是,我们选用了字符串去处理,第一次处理不当,忘记处理前导零导致了错误。

posted @ 2018-11-29 21:07  请你吃糖呀  阅读(137)  评论(0编辑  收藏  举报