这道一本通的题目,我第九个测试点WA了,90分求调
代码附上!(我代码写的有点乱,不好意思)
#include<bits/stdc++.h>
using namespace std;
int a[5005],dp[5005],n,ans,flag;
vector<int> vec;
void dfs(int k){
vec.push_back(a[k]);
if(vec.size()==ans){
if(!flag){
for(int i=0;i<vec.size();i++){
cout<<vec[i];
if(i!=vec.size()-1){
cout<<' ';
}
}
flag++;
}
return;
}
if(vec.empty() or a[k]>=vec.back()){
for(int i=k+1;i<n;i++){
if(a[i]>=a[k]){
dfs(i);
}
}
}
else{
return;
}
vec.pop_back();
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
dp[i]=1;
}
for(int i=1;i<n;i++){
for(int j=0;j<=i-1;j++){
if(a[i]>=a[j]){
dp[i]=max(dp[i],dp[j]+1);
ans=max(ans,dp[i]);
}
}
}
cout<<"max="<<ans<<endl;
for(int i=0;i<n;i++){
dfs(i);
if(flag){
return 0;
}
}
return 0;
}```