码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4745 Two Rabbits(DP)

时间:2014-06-23 08:15:51      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   http   tar   get   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4745

题意:n个数排成一个环。两个人AB初始时各自选定一个位置。每一轮A在顺时针方向选择一个位置,B在逆时针选择一个位置,且这两个人所选位置的数字相等,然后格子跳到新选的位置上。问最多进行多少轮?有一个限制为每次跳跃不能跨过以前自己曾经选过的格子。

思路:主要是分析问题的本质。其实就是求最长回文子列。f[i][j]为[i,j]的最长回文子列,则答案为max(f[1][i],f[i+1][n])。

 

int a[N],f[N][N],n;


int main()
{
    Rush(n)
    {
        if(n==0) break;
        int i,j,k;
        clr(f,0);
        FOR1(i,n) RD(a[i]),f[i][i]=1;
        for(k=2;k<=n;k++)
        {
            for(i=1;i+k-1<=n;i++)
            {
                j=i+k-1;
                f[i][j]=max(f[i+1][j],f[i][j-1]);
                if(a[i]==a[j]) f[i][j]=max(f[i][j],f[i+1][j-1]+2);
            }
        }
        int ans=0;
        FOR1(i,n) upMax(ans,f[1][i]+f[i+1][n]);
        PR(ans);
    }
}

 

 

 

HDU 4745 Two Rabbits(DP),布布扣,bubuko.com

HDU 4745 Two Rabbits(DP)

标签:style   class   blog   http   tar   get   

原文地址:http://www.cnblogs.com/jianglangcaijin/p/3799491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!