算法 第四章实践

1.实践题目

程序存储问题

2.问题描述

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

3.算法描述

for(int i=0;i<n;i++)
cin>>a[i];//将程序的长度存放在数组之中

sort(a,a+n);//将数组中的元素排序 

int num=0;int x=0;//新设置一个变量X为已存放的程序长度之和
for(int i=0;i<n;i++)
{
x=x+a[i];//从小到大加上数组内的程序长度
if(x> l) break;//当x大于磁带长度时就停止
else num++;//否则可存储程序数加1

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

时间复杂度:O(nlogn)

运用了sort()排序

空间复杂度:O(n)

运用了一维数组存储程序长度

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

本次实践采用贪心算法,主要是要确定贪心策略,这样就会简便一些,在学习了贪心算法以后在实践时运用使我对此算法理解更加地深刻,且总体来说此题比较简单也容易上手所以没有遇到特别大的困难。

原文地址:https://www.cnblogs.com/VKookie/p/10044957.html

时间: 2024-10-07 16:46:55

算法 第四章实践的相关文章

算法第四章实践报告

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

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

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

算法第四章上机实践报告

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

算法的第四章实践报告

分析程序存储问题.内容包括:   1. 实践题目 设有n 个程序要存放在长度为L的磁带上.各个程序存放在磁带上的长度已列出. 程序存储问题要求确定使得n  个程序能够在磁带上存储尽可能多的程序的一个存储方案.       2.问题描述 要求每次选择长度最小的程序放入磁带中,使得能放入的程序量最多       3.算法描述(说明你的贪心策略,并且参考会场安排问题,利用反证法证明贪心选择和最优子结构性质) 每次选择剩下的程序中长度最小的程序,如会场安排问题,按小集合排在前来遍历,也即是“贪心策略”.

算法第五章实践

一 . 实践题目 工作分配问题 二 . 问题描述 设有n件工作分配给n个人.将工作i分配给第j个人所需的费用为cij . 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小. 输入格式: 输入数据的第一行有1 个正整数n (1≤n≤20).接下来的n行,每行n个数,表示工作费用. 输出格式: 将计算出的最小总费用输出到屏幕. 输入样例: 3 10 2 3 2 3 4 3 4 5 输出样例: 9 三 .算法描述 进行回溯,遍历左子树后回溯遍历右子树 if(cp+

【实践报告】算法第三章实践报告

1.实践题目 7-2最大子段和 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时,定义子段和为0. 要求算法的时间复杂度为O(n). 2.问题描述 输入格式: 输入有两行: 第一行是n值(1<=n<=10000): 第二行是n个整数. 输出格式: 输出最大子段和. 输入样例: 在这里给出一组输入.例如: 6 -2 11 -4 13 -5 -2 输出样例: 在这里给出相应的输出.

算法第4章实践报告

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

第四章实践

1.实践题目 删数问题 2.问题描述 给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新 的正整数.对于给定的n位正整数a和正整数 k,设计一个算法找出剩下数字组成的新数最 小的删数方案. 输入格式: 第 1 行是1 个正整数 a.第 2 行是正整数k. 输出格式: 输出最小数. 输入样例: 在这里给出一组输入.例如: 178543 4 输出样例: 在这里给出相应的输出.例如: 13 3.算法描述 对输入的字符数组从第一个字符进行遍历,当小的数在前的时候,继续向后遍

算法第五章实践报告

1. 实践题目 工作分配问题 2. 问题描述 设有n件工作分配给n个人.将工作i分配给第j个人所需的费用为cij . 设计一个算法,对于给定的工作费用,为每一个人都分配1 件不同的工作,并使总费用达到最小. 输入格式: 输入数据的第一行有1 个正整数n (1≤n≤20).接下来的n行,每行n个数,表示工作费用. 输出格式: 将计算出的最小总费用输出到屏幕. 输入样例: 在这里给出一组输入.例如: 3 10 2 3 2 3 4 3 4 5 输出样例: 在这里给出相应的输出.例如:   9 3. 算