HDU 2850 Load Balancing(优先队列)
2014-04-24 23:15
309 查看
题意:给你 n个数分配给m部分(每部分个数不限),如何使得m部分和的差最小
思路:优先队列,和(sum)最小的优先分配。
思路:优先队列,和(sum)最小的优先分配。
#include<cstdio> #include<stdlib.h> #include<string.h> #include<string> #include<map> #include<cmath> #include<iostream> #include <queue> #include <stack> #include<algorithm> #include<set> using namespace std; #define INF 1e8 #define eps 1e-8 #define ll __int64 #define maxn 26 #define mol 1000000007 struct node { int id; ll sum; friend bool operator<(node a,node b) { return a.sum>b.sum; } }a[100005]; priority_queue<node>q; int cmp(node a,node b) { return a.sum>b.sum; } int main() { int t,n,m; int b[100005]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(b,0,sizeof(b)); int i,j; node p; for(i=0;i<m;i++) { p.id=i; p.sum=0; q.push(p); } for(i=0;i<n;i++) { scanf("%I64d",&a[i].sum); a[i].id=i; } sort(a,a+n,cmp); for(i=0;i<n;i++) { node u=q.top(); q.pop(); b[a[i].id]=u.id; u.sum+=a[i].sum; q.push(u); } printf("%d\n",n); for(i=0;i<n;i++) { printf("%d",b[i]); if(i!=n-1) printf(" "); } printf("\n"); while(!q.empty()) q.pop(); } return 0; }
相关文章推荐
- HDU 2850 Load Balancing (贪心+优先队列)
- Hdu 2850 Load Balancing (贪心 优先队列)
- HDU 2850 Load Balancing
- HDU-2850-Load Balancing(贪心)
- hdu 2850 Load Balancing (优先队列 + 贪心)
- hdu 2850 Load Balancing
- hdu 2850 Load Balancing (优先队列 + 贪心)
- hdu 2850——Load Balancing
- hdu 1026 Ignatius and the Princess I (bfs记录路径 两种记录路径方法模拟优先队列和优先队列两种做法)
- HDU 3152 Obstacle Course(优先队列)
- HDU 4546 优先队列
- hdu 1873 看病要排队(优先队列)
- HDU 5437 Alisha’s Party(优先队列模拟)
- HDU 5360(2015多校6)-Hiking(优先队列)
- hdu 1873 看病要排队 优先队列
- HDU 1896 Stones 优先队列
- hdu1242 广搜+优先队列
- 广搜_优先队列和记录搜索路径(HDU_1026)
- hdu 4198 杭电系列赛(四) BFS + 优先队列
- hdu 5521 Meeting(优先队列+dijkstra)(建图思想)