你把这道题考虑的太简单了~如果数据是10 9 5 8 7 5 6那按照你的程序要开3个~!
但实际上知要2个就OK了~第一个:10 9 5 5 ~~;第二个8 7 6~!
这道题要用DP~!
下面附上我的AC代码~C++写的应该可以看明白的把~!
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[1001],m,n,i,j,k,sum;
while(cin>>m)
{
sum=1,j=1;
memset(a,0,sizeof(a));//先将数组全部清0;
cin>>a[0];
for(n=1;n<m;++n)
{
sort(a,a+j); //对输入的数从小到大排序;
cin>>k;
for(i=0;i<j;++i)
{
if(k<=a[i]) //找到与当前导弹最接近的那个拦截系统;
{//更新该拦截系统;
a[i]=k;
break;
}
else if(i==j-1)
{//找到最后一个都还没找到能大于该导弹的,那就在开一个拦截系统;
sum++;
a[j]=k;
++j;
}
}
}
cout<<sum<<endl;
}
return 0;
}
自己思考一下把~!
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。