#include <stdio.h>
#include <algorithm>
using namespace std;
int n,tanbest=0,x[12],m,job[100],sum=0,best=10000,time[12],len2[12]={0},bestx[100];
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];
}
}
int comp()
{
int tmp =0;
for (int i=0;i< m;i++)
{
if(len2[i]>tmp)
{
tmp=len2[i];
}
}
return tmp;
}
void backtrack(int dep)
{
if (dep == n)
{
int tmp = comp();
if(tmp< best)
{
best=tmp;
for(int i=0;i< n;i++)
{
bestx[i]=x[i];
}
}
return;
}
for(int i=0;i<m;i++)
{printf("%d ",i);
len2[i] += job[dep];
x[dep] = i+1;
if(len2[i] < best)
{
backtrack(dep+1);
}
len2[i] -= job[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(0);
printf("%d",best);
}
贪心算法
最新推荐文章于 2020-12-06 14:57:11 发布