第四章上机报告

彭悦怡 20181003018

一.实践题目

4-1 程序存储问题 (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

二.问题描述

题目的要求是要我们一个程序最多可以放的下多少个程序,这就涉及到了如何选择的问题。

三.算法描述

我们选择的是先将数列排列好序列,从小到大装,每次都是选最小的装下,贪心的原则就是每次都是选择最小的。

代码:#include<iostream>

#include<algorithm>

using namespace std;

int a[1001];

int main(){

int n,m;

cin>>n>>m;

for(int i=0;i<n;i++){

cin>>a[i];

}

sort(a,a+n);

int count=0;

for(int i=0;i<n;i++){

m=m-a[i];

if(m>=0){

count++;

}

else break;

}

cout<<count<<endl;

return 0;

}

四.算法时间及空间的复杂程度分析

我们就用了一个3个for的循环语句,所以时间复杂程度是O(n).

我们只在数组a[1001]中进行,所以空间复杂程度也是O(n).

五.心得体会

贪心算法最重要的是我们要先确定我们的贪心原则

只有确定好贪心原则我们才可以设计我们的算法。

但是在打代码的过程中还是一些细节上的错误还是有待加强!

原文地址:https://www.cnblogs.com/1149640304penny/p/11869772.html

时间: 2024-10-02 19:07:49

第四章上机报告的相关文章

贪心算法?我全都要!——算法第四章上机实践报告

算法第四章上机实践报告 一.        实践题目 4-1 程序存储问题 (90 分) 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是 li,1≤i≤n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序. 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数. 输入格式: 第一行是2 个正整数,分别表示文件个数n和磁带的长度L.接下来的1行中,有n个正整数,表示程序存放在磁带上的长度. 输出

linux第四章实验报告

Linux第四章 用户和文件权限管理 实验环境 公司的linux主机即将提供给技术部作为开发服务器使用,根据部门内项目组的构成情况,首先需要建立相应的组账号.用户账号,并作为目录设置权限,还需要设置一个共用的数据存储目录,便于同事之间的数据交换. 需求描述 1.建立用户目录 创建目录/tech/benet和/tech/accp,分别用于存放各项目组中用户账号的宿主文件夹.例如,kylin用户的宿主目录应位于/tech/benet/kylin. 2.添加组账户 为两个项目组添加组账号benet,a

第四章上机实践报告

一:实践题目: 删数问题 (110 分) 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数.对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案. 输入格式: 第 1 行是1 个正整数 a.第 2 行是正整数k. 输出格式: 输出最小数. 输入样例: 在这里给出一组输入.例如: 178543 4 输出样例: 在这里给出相应的输出.例如: 13 二:问题描述: 使用贪心算法的思想每次选择从头开始递增的数字中最大的数字 即一

算法第四章上机实践报告

一.实践题目:删数问题 二.问题描述: 给定一个n位的正整数a,去掉其中任意k(k≤n) 个数字后,剩下的数字按照原次序排列成一个的新的正整数.在给定的n位正整数a和正整数k的情况下,输出完成该操作后剩下的正整数. 三.算法描述: 正整数的位数不定,用long long去存不一定存的下,所以用一个字符数组str[]来存储.此处运用一种贪心策略,不停的对这个整数进行扫描,当发现当前位的后一位比当前位小的情况,将当前位删除(例如1873,删除8肯定比删除7更优),若所有位数的数字按照升序排列,则删除

算法第四章上机实验报告

题目:删数问题 问题描述:输入一个正整数a和一个正整数k(k≤n ),在n位正整数a中去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新 的正整数. 算法描述:从前往后进行比较,删掉升序的最后那个数,若一直保持升序,则删掉最后一位数,重复k次,删掉k个数 时间复杂度:该算法主要进行了k次的for循环,每次循环的时间复杂度是o(n),故其时间复杂度为o(n) 空间复杂度:该算法不需要额外的数组或变量来存放数据,故其空间复杂度为o(1) 心得体会:在做题的时候还要再细心一点,特别对于一些小细节

第四章实践报告

7-1最优合并问题 1.问题描述: 给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列. 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较.试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少. 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多. 输入格式:第一行有 1 个正整数k,表示有 k个待合并序列. 第二行有 k个正整数,表示 k个待合并序列的长度. 输出格式:输出最多比较次数和最少比较

算法第四章实践报告

1.选择第二题进行分析. 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数.对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案. 输入 178543 4 输出132.问题描述:就是删掉指定数字中的一些数字,然后重新组成一个新的数使得这个数达到最小.3.算法描述:这个问题第一眼看下去容易想到对数组不停的排序然后不断删掉最大的,但是按着这个思路去做却发现,不断提取整型数组然后排序会比较复杂,因为要不断求余数等等,而且代码不

第四章实验报告

1.实践题目:程序存储问题 设有n 个程序{1,2,-, n }要存放在长度为L的磁带上.程序i存放在磁带上的长度是 li,1≤i≤n. 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序. 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数. 2.问题描述:要让磁带上最多可以存储的程序数,就要让长度短的程序优先 3.算法描述:采用贪心算法,先把程序按长短排序,然后在L的范围内把尽可能多的程序放上去 #include<iostream>

算法第二章上机报告

1.实践题目 7-1 二分查找 (20 分) 输入n值(1<=n<=1000).n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 输入格式: 输入共三行: 第一行是n值: 第二行是n个整数: 第三行是x值. 输出格式: 输出x所在的下标(0~n-1)及比较次数.若x不存在,输出-1和比较次数. 输入样例: 4 1 2 3 4 1 输出样例: 0 2 2.问题描述 输入n值(1<=n<=1000)