急!NOIP1999拦截导弹请教!

来源:百度知道 编辑:UC知道 时间:2024/05/12 01:24:28
我过了大部分数据~只有1组过不到~哪里错了嘛~
#include<iostream>
using namespace std;
int a[10000],b[10000],i,j,m,n,t;
int max(int i){
int r;
t=0;
for(r=1;r<=i;r++)
if(b[r]>t&&a[r]>=a[i+1])t=b[r];
i=t;}
int main()
{freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
bool p[10000];
n=1;
while(cin>>a[n]){n++;}n--;
b[1]=1;
for(i=2;i<=n;i++)
b[i]=max(i-1)+1;
t=0;
for(i=1;i<=n;i++)
if(b[i]>t)t=b[i];
cout<<t<<endl;
m=1;
memset(p,true,sizeof(p));
t=100000;
for(i=1;i<=n;i++)
{if(a[i]<=t&&p[i]){
t=a[i];
for(j=1;j<=n;j++)if(a[j]<=t&&p[j]){p[j]=false;t=a[j];}}
if(a[i]>t&&p[i]){m++;
p[i]=false;
t=a[i];

抱歉 第一次贴的代码有误 下面这个是修改后的

#include<iostream>
using namespace std;
int b[32];
int a[32]={236,865,858,565,545,445,455,656,844,735,638,652,659,714,845};
//int a[10000]={389,207,155,300,299,170,158,65};
int main()
{
int i,j,n=15,max,min,num1,num2;
memset(b,0,sizeof(b));
b[0]=1;
num1=0;
for(i=1;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
if(a[i]<=a[j] && b[j]>max)
max=b[j];//取得前面高度比第i枚高的,并且b[j]最大的值
b[i]=max+1;//这个值+1赋给b[i]
if(b[i]>num1)
num1=b[i];
}
cout<<num1<<endl;

memset(b,0,sizeof(b));
num2=0;
b[0]=1;
for(i=1;i<n;i++)
{
max=0;
for(j=0;j<i;j++)
if(a[i]>a[j] && b[j]>max)
max=b[j];
b[i]=max+1;
if(b[i]>num2)
num2=b[i];
}
cout<<num2<<endl;
return 0;
}

太深奥啦
是编程的练习题吗?

发给我老师把 pzliu@s