HDU1257 最少拦截系统
怎么再做这一题感觉有问题,觉得可以一套系统打完所有来袭的炮弹,但后来思考这一题好像是说先来的炮弹必须要打,不能等着先打后来的最高的炮弹。哦,想想也是这回事。感觉就像是站队:所有的同学一开始站成一排身高高度参差不齐。好,教练说:“从左往右开始,第一个站第一列,比他矮的站他后边,一样高的还站他后边;比上一个同学高的重新站一列,依次往下,直到所有同学站完,排头报完数我们就解散。” 然后就ojbk了。
大致思路可以这样理解,代码实现就好了。
#include<iostream>
int a[1001];
using namespace std;
int main()
{
int n,x;
while (cin>>n)
{
int ans = 1;
bool flag;
memset(a, 0, sizeof(a));
cin >> a[0];
for (int i = 1; i < n; i++) {
cin >> x;
flag = false;
for (int j = 0; j < ans; j++)
{
if (a[j] >= x) { // 注意是 >=
a[j] = x;
flag = true;
break;
}
}
if (!flag)
a[ans++] = x;
}
cout << ans << endl;
}
return 0;
}