zoukankan      html  css  js  c++  java
  • LPS HDOJ 4745 Two Rabbits

    题目传送门

     1 /*
     2     题意:一只兔子顺时针跳,另一只逆时针跳,跳石头权值相等而且不能越过起点
     3     LPS:这道就是LPS的应用,把环倍增成链,套一下LPS,然而并不能理解dp[i][i+n-2] + 1,看别人的解题报告吧,以后来补(玩游戏)
     4   详细解释 
     5 */
     6 /************************************************
     7 * Author        :Running_Time
     8 * Created Time  :2015-8-8 16:57:23
     9 * File Name     :HDOJ_4747_LPS.cpp
    10  ************************************************/
    11 
    12 #include <cstdio>
    13 #include <algorithm>
    14 #include <iostream>
    15 #include <sstream>
    16 #include <cstring>
    17 #include <cmath>
    18 #include <string>
    19 #include <vector>
    20 #include <queue>
    21 #include <deque>
    22 #include <stack>
    23 #include <list>
    24 #include <map>
    25 #include <set>
    26 #include <bitset>
    27 #include <cstdlib>
    28 #include <ctime>
    29 using namespace std;
    30 
    31 #define lson l, mid, rt << 1
    32 #define rson mid + 1, r, rt << 1 | 1
    33 typedef long long ll;
    34 const int MAXN = 2e3 + 10;
    35 const int INF = 0x3f3f3f3f;
    36 const int MOD = 1e9 + 7;
    37 int a[MAXN], dp[MAXN][MAXN];
    38 
    39 
    40 int main(void)    {     //HDOJ 4745 Two Rabbits
    41     int n;
    42     while (scanf ("%d", &n) == 1)   {
    43         if (!n) break;
    44         for (int i=1; i<=n; ++i)    {
    45             scanf ("%d", &a[i]);
    46             a[i+n] = a[i];
    47         }
    48         memset (dp, 0, sizeof (dp));
    49         for (int i=1; i<=2*n; ++i)  dp[i][i] = 1;
    50         for (int i=2; i<2*n; ++i)    {
    51             for (int j=1; j+i-1<=2*n; ++j)    {
    52                 if (a[j] == a[j+i-1]) dp[j][j+i-1] = dp[j+1][j+i-2] + 2;
    53                 else    {
    54                     dp[j][j+i-1] = max (dp[j+1][j+i-1], dp[j][j+i-2]);
    55                 }
    56             }
    57         }
    58         int ans = 0;
    59         for (int i=1; i<=n; ++i)    {
    60             ans = max (ans, dp[i][i+n-1]);
    61             ans = max (ans, dp[i][i+n-2] + 1);
    62         }
    63         printf ("%d
    ", ans);
    64     }
    65 
    66     return 0;
    67 }
    编译人生,运行世界!
  • 相关阅读:
    广陵基地输电线路实训场
    广陵基地配电网综合实训室
    广陵基地电缆实训室
    Windows Phone 9再见了!
    Windows Phone 8初学者开发—第23部分:测试并向应用商店提交
    Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画
    JDBC数据类型
    Java-BlockingQueue的使用
    苹果下如果安装nginx,给nginx安装markdown第三方插件
    苹果电脑包管理
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4713626.html
Copyright © 2011-2022 走看看