/*
贪心算法:
例子1.活动选择问题:
问题描述:一系列活动<a1,a2,...,an>,对于其中的活动ai来说的话对应的起始和终止的时间段<si,fi>求的是对于这些活动如果按照结束时间的升序列
进行排序的话,求的让活动出现兼容的最大活动;
定义某一个集合S[i,j]表示的是存在一个活动ak使得下面式子满足{si<=sk<fk<=fj},那么的话存在的是下面的情况。相应情况见书本;
*/
#include <iostream>
#include <vector>
using namespace std;
struct range
{
int start;
int end;
range(int s,int e):start(s),end(e){}
};
ostream& operator<<(ostream os,range b)
{
os<<b.start<<" "<<b.end<<" ";
return os;
}
struct A
{
vector<range> vec,vec1;
int num;
A(int n):num(n)
{
}
void select(int i,int n)
{
int m=i+1;
while (m<=n&&vec[i].end>vec[m].start)
{
m++;
}
if (m<=n)
{
cout<<vec[m]<<endl;;
select(m,n);
return ;
}
}
void init()
{
for (int i=0;i<=num;++i)
{
int key,value;
cin>>key>>value;
vec.push_back(range(key,value));
}
}
};
int main()
{
int n;
cin>>n;
A a(n);
a.init();
a.select(0,n);
return 0;
}
贪心算法
最新推荐文章于 2024-09-14 10:34:28 发布