万万没有想到
过不了多久我就会升职加薪,担任总经理出任CEO,迎娶白富美,走上人生巅峰,想想还有点小激动。怀着梦想,锤锤开始了一天的工作。锤锤所在的公司,只有有M台机器,可一天要完成N个作业,每个作业需要的时间为Ci,又知道每台机器每次只能处理一个作业。虽说锤锤可以瞬间操作机器,即一个作业结束瞬间开始下一个作业,可他仍不满足,想更快完成自己一天的工作,去偶见自己的白富美。看到这样一个有梦想的人,你是不是想帮他,那就帮他写个程序算算他最快多长时间可以完成任务。
输入格式
有多组输入,每组第一行两个整数N和M,(M,N<=10000);第二行N个整数,Ci代表第i个作业所花时间。 输入以0 #或# 0结束,其中#代表任意整数。
输出
每组测试数据输出一行,输出完成所有的最小时间。
样例输入
4 3
2 1 3 4
0 0
样例输出
4
程序实现
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int a[10005];
int f(int a,int b)
{
return a>b;//降序排列
}
int main()
{
int m,n;
while(cin>>m>>n&&m&&n)
{
memset(a,0,sizeof(a));
int i;
for(i=0;i<m;i++)
{
cin>>a[i];
}
if(n>=m)
{
sort(a,a+m);
cout<<a[m-1]<<endl;
}
else
{
sort(a,a+n,f);//对机器内的大小按降序排列
sort(a,a+m,f);//对所有的数进行降序排列
for(i=n;i<m;i++)
{
a[n-1]=a[i]+a[n-1];//第一个先完成的去做下一个相对较多的工作
sort(a,a+n,f);//在进行排序
}
cout<<a[0]<<endl;//输出所需的最少的时间
}
}
return 0;
}