HDU 2850 Load Balancing

来源:互联网 发布:java调用方法 编辑:程序博客网 时间:2024/05/20 03:41

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2850

题目大意:

怎么分配n个任务到m个服务器上使得负载尽量平衡。

思路:

将任务从大到小排序,依次放入负载最小的那个服务器中。

因为这个是特判题,找到一个答案即可,所以可以使用这个贪心。

下面是AC代码:

#include<iostream>#include<queue>#include<algorithm>using namespace std;const int maxn=100005;struct node{    int p,v;    friend bool operator<(node a,node b)    {        return a.v>b.v;//负载小的在队首    }}a[maxn];bool cmp(node a,node b){    return a.v>b.v;}int ans[maxn];int main(){    int n,m,t;    node temp;    cin>>t;    while(t--)    {        priority_queue<node>q;        cin>>n>>m;        for(int i=0;i<n;i++) cin>>a[i].v,a[i].p=i;        for(int i=0;i<m;i++)        {            temp.p=i;            temp.v=0;            q.push(temp);        }        sort(a,a+n,cmp);//从大到小排序        for(int i=0;i<n;i++)        {            temp=q.top();q.pop();            temp.v+=a[i].v;//不断将任务放入当前负载最小的服务器            ans[a[i].p]=temp.p;//记录第i个任务放入的是第几个服务器            q.push(temp);        }        for(int i=0;i<n-1;i++) cout<<ans[i]<<" ";        cout<<ans[n-1]<<endl;    }    return 0;}


0 0