2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 H 程序员的好印象

题意: 有一个0,1的序列,当你出现1之后就不能在出现0了,问你最长的子序列长度是多少

思路;0 0 0  1 1 1 ,1之后不能出现0了,那其实就是最长上升子序列啊没了。。。

代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100 + 10;
int a[maxn],dp[maxn];
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		memset(dp,0,sizeof(dp));
		memset(a,0,sizeof(a));
		for(int i = 0 ; i < n ; i++)
		{
			scanf("%d",&a[i]);
		}
		for(int i = 0 ; i < n ; i++)
		{
			dp[i] = 1;
			for(int j = 0 ; j < i ; j++)
			{
				if(a[j] <= a[i])
				{
					dp[i] = max(dp[i],dp[j]+1);
				}
			}
		}
		int ans = -1;
		for(int i = 0 ; i < n ; i++)
		{
			ans = max(ans,dp[i]);
		}
		printf("%d\n",ans);
	}
	
}
/*
4
1 1 0 1
6
0 1 0 0 1 0
1
0*/

猜你喜欢

转载自blog.csdn.net/wjmwsgj/article/details/80212821
今日推荐