您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-02 16:08 447 查看

解题思路:

用一个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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  博客 acm c++ HDU