题目描述:
设有n个程序{1,2,…, n }要存放在长度为L 的磁带上。程序i存放在磁带上的长度是li,1≤i≤n 。程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。
编程任务:
对于给定的n 个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。
数据输入:
(由文件input.txt 给出输入数据。)第一行是2个正整数,分别表示文件个数n 和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。
结果输出:
将编程计算出的最多可以存储的程序数输出(到文件output.txt) 。
输入文件示例输出文件示例
input.txt output.txt
6 50 5
2 3 13 8 80 20
注:若题目要求含上述括号中橙色字体,即将代码第11、12行注释解除,让其执行即可。
代码如下:
#include <iostream>
#include <algorithm>//sort()头文件
#include <fstream>//文件读写操作头文件
using namespace std;
#define N 10000
bool cmp(int x,int y){
return x<y;
}
int main(){
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int n,L; cin>>n>>L;//输入文件个数,磁带长度
int Long[N];
for(int i=0;i<n;i++){
cin>>Long[i];
}
sort(Long,Long+n,cmp);//以升序排列
int flag=0;//记录存储第flag个程序,flag从0开始(数组存储从0开始)
int LongSum=0;//记录存储的程序长度和
int Num=0;//记录存储的程序个数
while(flag<n){
LongSum=LongSum+Long[flag];//求和
if(LongSum>L) break;//超出磁带长度,跳出循环
else Num++;
flag++;
}
cout<<Num<<endl;
return 0;
}