2 6 3 2 3 4 6 2 2 6 3 6 4 3 2 2 2
6 0 1 2 0 1 2 6 0 1 1 2 2 2
题意:把n个任务分给m个主机,输出每个主机的处理时间的最大值和最小值的差最小的方案。
思路:想多了,原来就一道水题,比赛的时候没敢敲。。。先把任务排下序,每一次都取总时间最小的主机分配剩下的时间最大的任务。
#include <cstdio>
#include <algorithm>
using namespace std;
struct S{
int val,index,ans;
}s[100001];
int sum[101];
bool cmp(struct S a,struct S b)
{
return a.val<b.val;
}
bool cmpid(struct S a,struct S b)
{
return a.index<b.index;
}
int main()
{
int T,n,m,i,j,mn,mi;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&s[i].val);
s[i].index=i;
}
sort(s,s+n,cmp);
for(i=0;i<m;i++) sum[i]=0;
for(i=n-1;i>=0;i--)
{
mn=sum[0];
mi=0;
for(j=1;j<m;j++)
{
if(sum[j]<mn)
{
mn=sum[j];
mi=j;
}
}
s[i].ans=mi;
sum[mi]+=s[i].val;
}
sort(s,s+n,cmpid);
printf("%d\n",n);
for(i=0;i<n;i++)
{
if(i) printf(" ");
printf("%d",s[i].ans);
}
printf("\n");
}
}
HDU-2850-Load Balancing(贪心),码迷,mamicode.com
原文地址:http://blog.csdn.net/faithdmc/article/details/24672827