贪心思路
只要集合有一个导弹高度大于即将要比较的导弹的高度,就把他给替换掉,否则就往后面找,直到找到或者找完为止
如果都不大于就把要比较的导弹的高度加入到集合中
//代码如下
//cnt为集合个数,q[N]数组来存集合元素
//开始贪心操作`
for(int i =0 ; i < n;i)
{
int k = 0 ;
while(k < cnt && q[k] < h[cnt]) k;
if(k==cnt)
{
q[cnt++] = h[i];
}
else
{
q[k] = h[i];
}
}
**完整代码如下**
include[HTML_REMOVED]
using namespace std;
const int N = 1010;
int a[N];
int dp[N];
int cnt;
int q[N];
int main()
{
int n;
int t=0;
while(~scanf(“%d”,&n))
{
a[t] = n;
}
int res = 0;
for(int i = t-1;i >= 0;i–)
{
dp[i] = 1;
for(int j =t-1 ; j > i;j–)
if(a[i] >= a[j])
dp[i] = max(dp[i], dp[j]+1);
res = max(res , dp[i]);
}
cout << res <<endl;
for(int i = 0 ; i < t;i)
{
int k = 0;
while(k<cnt && q[k]<a[i]) k;
if(k==cnt)
q[cnt]=a[i];
else
{
q[k]=a[i];
}
}
cout << cnt;
return 0;
}