题目链接: 点击打开链接
树形的dp搞一搞
dp[i][0]表示前i个还没出现1的最大值
dp[i][1]表示前i个已经出现1的最大值
这题数据范围100....emmmm让我觉得n^2的最长上升子序列不是就可以么...
#include<bits/stdc++.h>
using namespace std;
#define rep(i,j,k) for(int i=j;i<=k;i++)
typedef long long ll;
typedef pair<int,int> P;
int dp[105][2];
int a[105];
int main(){
int n;
while(cin>>n){
memset(dp,0,sizeof(dp));
rep(i,1,n) cin>>a[i];
rep(i,1,n){
if(a[i]==0){
dp[i][0]=dp[i-1][0]+1;
dp[i][1]=dp[i-1][1];
}else{
dp[i][0]=dp[i-1][0];
dp[i][1]=max(dp[i-1][0],dp[i-1][1])+1;
}
}
cout<<max(dp[n][0],dp[n][1])<<endl;
}
return 0;
}