zoukankan      html  css  js  c++  java
  • hdu 4512(最长公共递增子序列加强版)

    题意:就是让你求出给定序列的最长的一个左右对称的并且左边递增右边递减的子序列。

    思路:可以说是一个最长公共递增子序列的加强版,推荐你看下这个资料:http://www.clarkok.com/blog/?p=353,讲得挺好的,学会这个之后就是如何控制左右对称的问题了

    代码实现:

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int T,n,a[205],b[205],dp[205],i,j,k,max;
        scanf("%d",&T);
        while(T--)
        {
            max=-1;
            scanf("%d",&n);
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                b[n-i+1]=a[i];
                dp[i]=0;
            }
            dp[0]=0;
            for(i=1;i<=n;i++)
            {
                k=0;
                for(j=1;j<=n-i+1;j++)//j<=(n-i+1)这个地方要理解,具体的自己拿组数组测下
                {
                    if(a[i]==b[j])
                    {
                        if(j!=(n-i+1))//不是自己和自己匹配了
                        {
                            if(dp[j]<(dp[k]+2))
                              dp[j]=dp[k]+2;
                        }
                        else//自己和自己匹配了
                        {
                            if(dp[j]<(dp[k]+1))
                              dp[j]=dp[k]+1;
                        }
                    }
                    else if(a[i]>b[j])
                    {
                        if(dp[k]<dp[j])
                            k=j;
                    }
                    if(max<dp[j])
                        max=dp[j];
                }
            }
            printf("%d\n",max);
        }
        return 0;
    }
  • 相关阅读:
    严格模式
    排序,求最大值最小值
    原型继承
    android 系统
    BASE64Decoder
    jstl
    list  遍历
    2015GitWebRTC编译实录9
    2015GitWebRTC编译实录8
    2015GitWebRTC编译实录7
  • 原文地址:https://www.cnblogs.com/jiangjing/p/2991852.html
Copyright © 2011-2022 走看看