HDU-1257.最少拦截系统(基础DP)

时间:2023-03-09 18:29:02
HDU-1257.最少拦截系统(基础DP)

  本题大意:给出n和n个整数,让你求出其中不上升子序列的个数。

  本题思路:用dp[ i ]保存第i个防御系统攻击的最低的导弹,遍历数组,遇到更低的导弹则更新最小值,否则新加一个系统用来防御,并且更新最小值。

  参考代码:

#include <iostream>
using namespace std; const int maxn = 1e5 + ;
int n, ans;
int a[maxn], dp[maxn];
bool flag; int main () {
while(cin >> n) {
ans = ;
for(int i = ; i < n; i ++)
cin >> a[i];
dp[] = a[];//用dp[i]表示第i个下降子序列的最小元素
for(int i = ; i < n; i ++) {
flag = false;
for(int j = ; j <= ans; j ++)
if(a[i] <= dp[j]) {
dp[j] = a[i];
flag = true;
break;
}
if(!flag) dp[++ ans] = a[i];
}
cout << ans << endl;
}
return ;
}