原题链接
洛谷翻译
思路
- 由题意得,只有01两个数,0前面不能有1,所以可以转化为求最长上升子序列问题,就是简单dp
- 对于i前面的数,只要是不大于arr[i]就可以更新dp[i]
AC代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,arr[N],dp[N],ans;
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(arr[i]>=arr[j]){//对于i前面的数,只要是不大于arr[i]就可以更新dp[i]
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]); //更新最大值
}
printf("%d\n",ans);
return 0;
}