#include <stdio.h>
#include <algorithm>
using namespace std;
int n,tanbest=0,x[12],m,job[100],sum=0,best=0,time[12],len2[12];
void tanxin(void)
{
int k=1;
sort(job,job+n);
if (n<m) tanbest=job[0];
for (int i=n-1;i>=n-m;i--)
time[n-i]=job[i];
for (int i=n-m-1;i>=0;i--){
for (int j=1;j<=m;j++){
for (int l=1;l<=m;l++){
if (time[j]<time[l] && time[j]<time[k] ) k=j;
}
}
time[k]=time[k]+job[i];
}
}
void backtrack(int dep)
{
if (dep == n)
{
for(int i=0;i<m;i++)
{
if (best>len2[i]) best=len2[i];
if (best<=len2[i]) best=len2[i];
}
}
for(int i = 0; i < m; i++)
{
len2[i] += time[dep];
x[dep] = i+1;
if(len2[i] < best)
{
backtrack(dep+1);
}
len2[i] -= time[dep];
}
}
main()
{
scanf("%d",&n);
scanf("%d",&m);
for (int i=0;i<n;i++)
scanf("%d",&job[i]);
tanxin();
for (int i=1;i<=m;i++)
if (tanbest<time[i]) tanbest=time[i];
printf("%d",tanbest);
printf("\n");
backtrack(1);
printf("%d",best);
}
多机调度
最新推荐文章于 2023-10-19 01:07:31 发布