#include
#include
#include
#include
using namespace std;
struct TJob//作业
{
int id;//索引号
int t;//用时
};
bool operator>(const TJob& x, const TJob& y)
{
return x.t > y.t;
}
struct TM//机器
{
int id;
int t;
vectorVJ;
TM() :id(0),t(0) {}
};
struct TMInQ//机器在优先队列中的数据结构
{
int id;
int t;
};
bool operator>(const TMInQ& x,const TMInQ& y)
{
return x.t > y.t;
}
int main()
{
int n, m;
cout << "请依次输入作业个数和机器个数"<> n >> m;
TJob* J = new TJob[n];
for (int i = 0; i < n; i++)
{
J[i].id = i+1;//作业编号从1开始到n
cout << "作业" << J[i].id << "的用时为:";
cin >> J[i].t;//赋值
}
TM* M = new TM[m];
for (int i = 0; i < m; i++)
{
M[i].id = i ;//机器在数组中的下标
M[i].t = 0;
//VJ不用管,默认为空
}
priority_queue, greater >PQ;
sort(J, J + n, greater());
for (int i = 0; i < m; i++)
{
M[i].t = J[i].t;
M[i].VJ.push_back(J[i].id);
TMInQ ma;
ma.id = M[i].id;
ma.t = M[i].t;
PQ.push(ma);
}
//贪心策略求解
for (int i = m; i < n; i++)
{
TMInQ ma = PQ.top();
PQ.pop();
//ma.id就是当前需要分配任务的机器
M[ma.id].t += J[i].t;
M[ma.id].VJ.push_back(J[i].id);
ma.t += J[i].t;
PQ.push(ma);
}
//输出解
for (int i = 0; i < m; i++)
{
cout << "机器" << M[i].id+1 << "处理作业";
for (int j = 0; j < M[i].VJ.size(); j++)
{
cout << M[i].VJ[j] << ",";//打印作业标号
}
cout << "总用时为"<