(dp GOOD)acwing 272. 最长公共上升子序列

272. 最长公共上升子序列

题目链接https://www.acwing.com/problem/content/274/
在这里插入图片描述
本题参考y总的代码代码链接https://www.acwing.com/solution/content/4955/

#include<iostream>
#include<algorithm>

using namespace std;

int a[3010],b[3010];
int dp[3010][3010];

int main(){
    
    
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    for(int i=1;i<=n;i++)
    cin>>b[i];
    for(int i=1;i<=n;i++){
    
    
        int ans=1;
        for(int j=1;j<=n;j++){
    
    
           dp[i][j]=dp[i-1][j];
           if(a[i]==b[j]){
    
    
               dp[i][j]=max(dp[i][j],ans);
           }
           if(a[i]>b[j])ans=max(ans,dp[i-1][j]+1);
           
        }
    }
    int res=0;
    for(int i=1;i<=n;i++){
    
    
        res=max(res,dp[n][i]);
        
    }
    cout<<res;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46028214/article/details/115273355