题意: 有一个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*/