/* ans1为最长递减子序列的长度 根据Dilworth定理:ans2为最少的下降序列个数就等于整个序列最长上升子序列的长度 */ #include <bits/stdc++.h> using namespace std; const int N = 1010; int a[N],dp[N],dp2[N],n; int main(){ cin>>n; for(int i = 1;i<=n;i++) cin>>a[i]; int ans1 = 0,ans2 = 0; for(int i = 1;i<=n;i++){ dp[i] = dp2[i] = 1; for(int j = i-1;j>=1;j--){ if(a[j]>=a[i]) dp[i] = max(dp[i],dp[j]+1); else dp2[i] = max(dp2[i],dp2[j]+1); } ans1 = max(ans1,dp[i]); ans2 = max(ans2,dp2[i]); } cout<<ans1<<"\n"<<ans2<<"\n"; return 0; }
#牛客春招刷题训练营#https://www.nowcoder.com/discuss/727521113110073344