原题链接
考察:线性dp or 枚举
大佬的思路:
  0不能出现在1的右边,所以是单调非下降子序列,求最长即可.
本菜狗的思路:
  枚举每一个1的位置,求保留前面所有0和后面所有1的长度,取最长即可.

Code

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int N = 110;
int n,a[N];
vector<int> v;
void solve()
{
	int ans = n-v.size();//只保留0
	for(int i=0;i<v.size();i++) 
	{
		int j = v[i];//第i+1个1的位置
		ans = max(ans,j-i+(int)v.size()-i-1); 
	}
	printf("%d\n",ans);
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]) v.push_back(i);
	}
	solve();
	return 0;
}