第四章上机实践报告

时间:2019-11-16
本文章向大家介绍第四章上机实践报告,主要包括第四章上机实践报告使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

设有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 main()
{
	int num;//输入文件个数
	cin >> num;
	int length;//输入磁带长度
	cin >> length;
	int i,j,software[1001];
	for(i = 1;i <= num;i++)
	cin >> software[i];//输入第i个程序的长度
	
	sort(software + 1,software + num + 1);
	//升序排列程序长度
	
	int status = 0;//判断磁带当前的状态
	for(i = 1;i <= num;i++)
	{
		status = status + software[i];
		if(status > length)
		{
			cout << i - 1;
			break;
		}
	}
	if(status <= length) cout << num; 	 
}

  贪心策略:因为程序长度的输入并没有格式要求,所以只能先将程序长度升序输出,然后每次往磁带增加一个程序,通过status判断磁带当前的状态是否已满。若status > 磁带长度length,则拿出已装入的程序,输出i - 1。若status一直小于length,输出程序的个数就可以了。

       时间复杂度:sort的时间复杂度是O(nlogn),因此这个算法的时间复杂度也是O(nlogn)。

       心得:我这个算法有点太简单了...问题设置得再难一点就解决不了。需要学习更好的算法,运用好思维能力。

原文地址:https://www.cnblogs.com/KongLeung/p/11874060.html