HDU 1257 最少拦截系统(贪心)

时间:2021-07-02 15:17:27

解题思路:用一个vector存下数据,从头开始非递增遍历,并把符合条件的删除,一次操作,ans++,当vector为空时退出循环。(PS:学到了vector的erase操作,竟然还有返回值,涨姿势了)

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector> using namespace std; int n;
vector<int > vei; int main()
{
while(~scanf("%d",&n))
{
int x;
for (int i=0; i<n; i++)
{
scanf("%d",&x);
vei.push_back(x);
}
vector<int>::iterator it; int x1;
int ans=0;
while(!vei.empty())
{
x1=*(vei.begin());
for (it=vei.begin(); it!=vei.end(); )
{
x=(*it);
if (x1>=x)
{
it=vei.erase(it);//erase的返回值是下一个元素的迭代器
x1=x;
}
else
{
it++;
}
}
ans++;
}
cout<<ans<<endl;
} return 0;
}