最长上升子序列和最长公共子序列
#include <iostream> using namespace std; int main() { int n; int a[100],dp[100]; cin>>n; for(int i=0;i<n;i++){ cin>>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[j]+1>dp[i]) dp[i]=dp[j]+1; } } int ans=0; for(int i=0;i<n;i++) { ans=max(ans,dp[i]); } cout<<ans<<endl; return 0; }
#include <iostream> #include <cstring> using namespace std; int main() { int n,m; int a[100],b[100],dp[100][100]; memset(dp,0,sizeof(dp)); cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<m;i++){ cin>>b[i]; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i-1]==b[j-1]){ dp[i][j]=dp[i-1][j-1]+1; } else { dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } } cout<<dp[n][m]<<endl; return 0; } /** 6 7 1 5 2 6 8 7 2 3 5 6 9 8 4 **/