题目链接:点击这里
此题可用简单的贪心算法,具体可见CLRS中的贪心算法介绍。
可使用Exchange策略进行证明:当对执行任务进行递减排序并且依次执行时,可以达到最优解。
解题的基本思路:首先利用结构体存储每个部下的交代任务和执行任务的时间,然后进行操作符重载,使得可以直接使用内置sort函数进行排序,然后就能很愉快的AC了。
注意:进行操作符重载时只能重载<号。
问题:书上的标准代码,对结构体进行新建对象时采用的(work){b,j},不太理解。。。
C++代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct work
{
int b,j;
bool operator < (const work& x)const
{
return j > x.j; //在这里操作符只能重载<号,因此return为>即可实现递减序列排序
}
work(int x, int y)
{
b = x;
j = y;
}
};
int main()
{
int n,b,j,CASE = 1;
while(cin>>n && n)
{
vector<work> temp;
for(int i = 0; i < n; i++)
{
cin>>b>>j;
temp.push_back(work(b,j));//(work){b,j}
}
sort(temp.begin(),temp.end());
int worktime = 0;
int ans = 0;
for (int i = 0; i < n; i++)
{
worktime += temp[i].b;
ans = max(ans,worktime+temp[i].j);
}
cout<<"Case "<<CASE++<<": "<<ans<<endl;
}
return 0;
}

本文通过一个具体的题目实例介绍了如何运用贪心算法解决问题。详细解释了如何利用结构体存储任务信息,并通过重载操作符实现任务的排序,进而得到最优解。文中还附带了完整的C++代码实现。
223

被折叠的 条评论
为什么被折叠?



