#include <iostream>
using namespace std;
void FindPlan(int* data,int num)
{
    int* count = new int[num];
    for(int i = 0;i < num; i++)
        count[i] = 0;
    int maxi;
	/*if(num>=2&&data[num-1]<=data[num-2])
		count[num-1] = 1;*/
	count[num-1] = 1;									//若击落最后一个导弹则只能击中一个
    for(i = num-2;i >= 0; i--)							//从倒数第二枚导弹开始计数,若从第i枚导弹并开始打击(包含第i枚)能打击多少枚导弹
    {
        maxi = 0;
        for(int j = i+1;j < num; j++)
        if(data[j]<=data[i]&&count[j]>maxi)
            maxi = count[j];
        count[i] = maxi+1;
	
		/*cout<<i<<endl;
		for(int k = 0;k < num; k++)
			cout<<count[k]<<" ";
		cout<<endl;*/
    }
    int max = 0;
	/*for(i = 0;i < num; i++)
		cout<<count[i]<<" ";
	cout<<endl;*/
    for(i = 0;i < num; i++)
        if(count[i]>max)
            max = count[i];
    cout<<max<<endl;
	free(count);
}
int main()
{
    int num;
    int *data;
    cin>>num;
	while(num!=0)
	{
		data = new int[num];
		for(int i = 0;i < num; i++)
			cin>>data[i];
		FindPlan(data,num);
		free(data);
		cin>>num;
	}
    
    return 0;
}
原文:http://www.cnblogs.com/lxk2010012997/p/4417968.html