http://acm.hdu.edu.cn/showproblem.php?pid=4864
这是一道我见过至少三遍的题,每一遍都没有做出来,我立志要把它A掉!
#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>
int n, m;//n个机器,m个任务
struct Task
{
int xi, yi;
}task[100005];
struct Machine
{
int time;
int level;
}machine[100005];
int occupy[100005];
vector<Task>finish;
bool cmp1(Task &a, Task &b)
{
if (a.xi == b.xi)
return a.yi > a.yi;
return a.xi > b.xi;
}
bool cmp2(Machine &a, Machine &b)
{
if (a.time == b.time)
return a.level < b.level;
return a.time < b.time;
}
int main()
{
while (cin >> n >> m)
{
int i;
for (i = 1; i <= n; i++)
cin >> machine[i].time >> machine[i].level;
for (i = 1; i <= m; i++)
cin >> task[i].xi >> task[i].yi;
int maxmoney = 0;
memset(occupy, 0, sizeof(occupy));
finish.clear();
sort(task + 1, task + m, cmp1);
sort(machine + 1, machine + n, cmp2);
int j;
for (i = 1; i <= m; i++)
{
for (j = 1; j <= n; j++)
{
if (machine[j].level >= task[i].yi&&machine[j].time >= task[i].xi&&occupy[j] == 0)
{
finish.push_back(task[i]);
occupy[j] = 1;
break;
}
}
}
cout << finish.size() << " ";
for (i = 0; i < finish.size(); i++)
maxmoney += 500 * finish[i].xi + 2 * finish[i].yi;
cout << maxmoney << endl;
}
return 0;
}
并不知道过没过,杭电OJ在做ccpc的网络选拔赛,结束之后我就过去交。