思路:最长单调递减子序列的个数 就是等于 最长单调递增子序列的长度(因为是递增这些序列要么独立驾一个炮台,要么加到其他的序列中去,因为它们是递增,那么不可能加到同一序列中去,最会最多加的炮台数量就是等于他们的长度),所以这题就转化求最长上升子序列的长度了。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[10000];
int main(){
while(scanf("%d",&n)!=EOF){
int dp[1000];dp[1] = 1;
int ans = 0;
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
int M = 0;
for(int j = 1; j < i ; j++){
if(a[j] < a[i]){
M = max(M,dp[j]);
}
}
dp[i] = M + 1;
ans = max(dp[i],ans);
}
cout<<ans<<endl;
}
}