这道题其实就是DP嘛
这也让作者对此有了更深一步的认识。
自从上次写了特别特别特别啰嗦的题解至今仍未通过以后
——还是写简单一点的题吧!
献上代码:
#include<bits/stdc++.h>//最长不上升子序列
using namespace std;
int h[101][101];
int main()
{
int n,max=0;
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>h[i][1];
h[i][2]=1;//初始当前系统拦截导弹数为1
}
for(int i=n-1;i>=1;--i)//累计从当前导弹开始,能够接到的最多的导弹
for(int j=i+1;j<=n;++j)
if(h[i][1]>=h[j][1]&&h[i][2]<=h[j][2]) h[i][2]=h[j][2]+1;//判断当前导弹高度是否小于系统能够拦截的导弹高度并找出最优解(高度最高)
for(int i=1;i<=n;++i)
if(h[i][2]>max)max=h[i][2];//寻找导弹数的最大值
cout<<max<<endl;//输出储存在max的能够接到的最多的导弹数
//防抄袭措施:要拦截所有导弹最少要配备多少套这种导弹拦截系统自己写在补充一下程序就可以了
return 0;
}