PAT1045(动态规划)

1,题目

点这里。。。

2,代码

#include
#include
int N;
int M,favorite_colors[300];
int L,given_stripe[10010];
int maxLength=0,dp[10010];
int main(){
    memset(dp,0,sizeof(dp));
    scanf("%d",&N);
    scanf("%d",&M);
    for(int i=1;i<=M;++i) scanf("%d",&favorite_colors[i]);
    scanf("%d",&L);
    for(int i=1;i<=L;++i) scanf("%d",&given_stripe[i]);
    for(int i=1;i<=L;++i){
        if(given_stripe[i]==favorite_colors[1]) dp[i]=dp[i-1]+1;
        else dp[i]=dp[i-1];
    }
    for(int i=2;i<=M;++i){
        for(int j=i;j<=L;++j){
            if(given_stripe[j]==favorite_colors[i]) {
                int mal=-1;
                for(int k=i;k<j;++k){
                    if(mal<dp[k]) mal=dp[k];
                }
                dp[j]=mal+1;
            }
        }
    }
    for(int i=1;i<=L;++i){
        if(dp[i]>maxLength) maxLength=dp[i];
    }
    printf("%d",maxLength);
    return 0;
}

你可能感兴趣的:(PAT1045(动态规划))