Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
112602 蒋沛霖 最长公共子序列 C++ 解答错误 0 0 MS 252 KB 765 2023-11-27 13:35:27

Tests(0/10):


#include <iostream> using namespace std; const int MAXN = 1000 + 10; int n, data[MAXN]; int dp[MAXN]; int from[MAXN]; void output(int x) { if(!x)return; output(from[x]); cout<<data[x]<<" "; //迭代输出 } int main() { cin>>n; for(int i=1;i<=n;i++)cin>>data[i]; // DP for(int i=1;i<=n;i++) { dp[i]=1; from[i]=0; for(int j=1;j<i;j++) if(data[j]<data[i] && dp[i]<dp[j]+1) { dp[i]=dp[j]+1; from[i]=j;//逐个记录前驱 } } int ans=dp[1], pos=1; for(int i=1;i<=n;i++) if(ans<dp[i]) { ans=dp[i]; pos=i;//由于需要递归输出 //所以要记录最长上升子序列的最后一 //个元素,来不断回溯出路径来 } cout<<ans<<endl; output(pos); return 0; }


测评信息: