【wikioi】【DP】1044拦截导弹

#include<stdio.h>
#include<stdlib.h>
#define MAXN 100

int max(int x,int y)
{
	return (x>y)?x:y;
}
/*
	第一问中,很明显就是最长下降子序列
	第二问中。每一个导弹最终的结果都是要被打的,如果它后面有一个比它高的导弹,那打它的这个装置无论如何也不能打那个导弹了,经过这么一分析,这个问题便抽象成在已知序列里找最长不下降序列的问题。" 
*/
int main(void)
{
    freopen("in.txt","r",stdin);
	int i,j,k;
	int a[MAXN];
	int b[MAXN]={0},c[MAXN]={0};
	int n=1;
	while(scanf("%d",&a[n])!=EOF)
	{
		n++;
	}
	n--;

	for(i=1;i<=n;i++)
	{
		for(j=1;j<i;j++)
		{
		    
			if(a[i]<a[j])
				b[i]=max(b[i],b[j]+1);
			if(a[i]>=a[j])
				c[i]=max(c[i],c[j]+1);
		}
	}
	int maxb=0,maxc=0;
	for(i=1;i<=n;i++)
	{
		maxb=max(maxb,b[i]);
		maxc=max(maxc,c[i]);
	}
	printf("%d\n%d\n",maxb+1,maxc+1);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值