题目:
分析:
第一想法:必须先排序,是贪心类的典型去区间问题。
如何排序,应该先按照每个元组的第一个数排序,然后每次寻找不大于第二个数的进行更新,直到下一个元组的第一个数都大于已选择元组的第二个数。
代码:
void sort(int left,int right,vector<vector<int> > a)
{
if(left >= right) return;
int i = left;
int j = right;
int key = a[left][0];
int key0 =a[left][1];
while(i < j)
{
while(i < j && key <= a[j][0]) j--;
a[i][0]=a[j][0];
a[i][1]=a[j][1];
while(i < j && key >= a[i][0]) i++;
a[j][0] = a[i][0];
a[j][1] = a[i][1];
}
a[i][0] = key;
a[i][1]=key0;
sort(left, i - 1,a);
sort(i + 1, right,a);
}
int main()
{
vector<vector<int>> p;
sort(0,p.size()-1,p);
int all=1;
int loca=0;
int v=p[0][1];//结尾处
for(int i=1;i<p.size();i++)
{
if(p[i][0]>=v)
{//该下一段的开始了 下一段的开始应该严格小于上一段 结束
while(1)
{
if(i==p.size()) return all;
if(p[i][0]==v) i++;
else
{
v=p[i][1];
all++;
break;
}
}
}
else v=min(p[i][1],v);
}
return all;
}