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