满意答案
5i25ob8j0
2013.04.16
采纳率:44% 等级:13
已帮助:8221人
我给你写了一个,不过得出的序列可能并不是唯一的,但保证是正确的!时间复杂度是O(n^2),你所说的n*logn的目前我是做不出来,等做出来再告诉你吧!
#include
using namespace std;
int main()
{
int i,j,n,x[100],d[100]; //x[]表示各个导弹高度,d[i]记录为第 i 枚导弹被拦截之后,
//这套系统最多还能拦截的导弹数(包含被拦截的第 i 枚)。
int dmax=0,xh=0; //记录拦截的最大个数以及第一个被拦截的序号
cin>>n; //输入拦截的导弹数
for(i=0;i
{
cin>>x[i]; //输入每个导弹的高度
d[i]=1; //初始值都设为1
}
for(i=n-2;i>=0;i--) //动态规划算法,递归实现,从后面向前循环
{
for(j=i+1;j
if((x[j]
{
d[i]=d[j]+1;
}
}
for(i=0;i
{
if(d[i]>dmax)
{
dmax=d[i];
xh=i; //第一枚被拦截的导弹序号
}
}
cout<
cout<
for(j=xh+1;j
if((x[j]<=x[xh])&&(d[xh]==d[j]+1)) //判断条件
{
cout<
xh=j;
}
return 0;
}
23分享举报