一道蓝桥杯的算法

#include <stdio.h>
#define MAX_N 10000

int dp[MAX_N]={0};
int i=0;
int dao[MAX_N];

int max(int a,int b)
{
	return a>b?a:b;
}

void solve1()
{
	int k,j;
	int res = 0;
	int n = i;
	for(j=0; j<n; j++)
	{
		dp[j] = 1;
		for(k=0; k<j; k++)
			if(dao[k] > dao[j])
				dp[j] = max(dp[j],dp[k]+1);
		res = max(res , dp[j]);
	}
	printf("%d\n",res);
}

void solve2()
{
	int k,j;
	int res = 0;
	int n = i;
	for(j=0; j<n; j++)
	{
		dp[j] = 1;
		for(k=0; k<j; k++)
			if(dao[k] < dao[j])
				dp[j] = max(dp[j],dp[k]+1);
		res = max(res , dp[j]);
	}
	printf("%d\n",res);
}


int main()
{
	char q;
	int s=0;

	while(q=getchar())
	{
		if(q>='0' && q<='9')
			s = s*10+q-'0';
		else if(q == ' ')
		{
			dao[i] = s;
			i++;
			s = 0;
		}
		else
			break;
	
	}
	dao[i] = s;
	i++;
	solve1();
	solve2();

	return 0;
}

发布了9 篇原创文章 · 获赞 3 · 访问量 718

猜你喜欢

转载自blog.csdn.net/delete_bug/article/details/103040884
今日推荐