Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and they were arranged as a clockwise ring. That is to say, the first stone was adjacent to the second stone and the n-th stone, and the second stone is adjacent to the first stone and the third stone, and so on. The weight of the i-th stone is ai.

The rabbits jumped from one stone to another. Tom always jumped clockwise, and Jerry always jumped anticlockwise.

At the beginning, the rabbits both choose a stone and stand on it.
Then at each turn, Tom should choose a stone which have not been stepped
by itself and then jumped to it, and Jerry should do the same thing as
Tom, but the jumping direction is anti-clockwise.

For some unknown reason, at any time , the weight of the two stones
on which the two rabbits stood should be equal. Besides, any rabbit
couldn't jump over a stone which have been stepped by itself. In other
words, if the Tom had stood on the second stone, it cannot jump from the
first stone to the third stone or from the n-the stone to the 4-th
stone.

Please note that during the whole process, it was OK for the two rabbits to stand on a same stone at the same time.

Now they want to find out the maximum turns they can play if they follow the optimal strategy.

InputThe input contains at most 20 test cases.

For each test cases, the first line contains a integer n denoting the number of stones.

The next line contains n integers separated by space, and the i-th
integer ai denotes the weight of the i-th stone.(1 <= n <= 1000, 1
<= ai <= 1000)

The input ends with n = 0.OutputFor each test case, print a integer denoting the maximum turns.Sample Input

1
1
4
1 1 2 1
6
2 1 1 2 1 3
0

Sample Output

1
4
5

Hint

For the second case, the path of the Tom is 1, 2, 3, 4, and the path of Jerry is 1, 4, 3, 2.
For the third case, the path of Tom is 1,2,3,4,5 and the path of Jerry is 4,3,2,1,5.

题意 : 给你一个环形的串,上面写有一些数字,两只兔子向着相反的方向去跳,任意选择起点,并且要求每一轮两只兔子所占的数字是相同,问最多能进行几轮?

思路分析:其实就是让求一个最长回文的串,对于环的话,我们可以将长度拉直并延伸一倍,对新的串求区间内的回文,比较好写,然后就是在 dp求完任意一个区间内的最长回文串后,我们需要做的就是枚举下区间的头,判断一下长度为 n的区间内的最长回文串的长度最长是多少

代码示例:

int n;
int pre[2005];
int dp[2005][2005]; int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); while(~scanf("%d", &n) && n){
for(int i = 1; i <= n; i++){
scanf("%d", &pre[i]);
pre[n+i] = pre[i];
}
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= 2*n; i++) dp[i][i] = 1; for(int len = 2; len <= n; len++){
for(int i = 1; i <= 2*n; i++){
int j = i+len-1;
if (j > 2*n) break;
if (pre[i] == pre[j]) dp[i][j] = dp[i+1][j-1]+2;
else dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
}
}
int ans = 0;
for(int i = 1; i <= n; i++) ans = max(ans, dp[i][i+n-1]); // 不共起点
for(int i = 1; i <= n; i++) ans = max(ans, dp[i][i+n-2]+1); // 共起点
printf("%d\n", ans);
}
return 0;
}

区间dp - 不连续的回文串的更多相关文章

  1. Palindromic characteristics CodeForces - 835D (区间DP,预处理回文串问题)

    Palindromic characteristics of string s with length |s| is a sequence of |s|integers, where k-th num ...

  2. HDU5658:CA Loves Palindromic (回文树,求区间本质不同的回文串数)

    CA loves strings, especially loves the palindrome strings. One day he gets a string, he wants to kno ...

  3. 【区间DP】低价回文

    [区间DP]低价回文 标签(空格分隔): 区间DP 回文词 [题目描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身上安装了一个电子身份标签,当奶牛通过扫描器的时 ...

  4. 区间dp(低价回文)

    [题目大意] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身份信息.目前,每个身份都是由一个字符 ...

  5. 区间dp最长回文子序列问题

    状态转移方程如下: 当i > j时,dp[i,j]= 0. 当i = j时,dp[i,j] = 1. 当i < j并且str[i] == str[j]时,dp[i][j] = dp[i+1 ...

  6. manacher算法——回文串计算的高效算法

    manacher算法的由来不再赘述,自行百度QWQ... 进入正题,manacher算法是一个高效的计算回文串的算法,回文串如果不知道可以给出一个例子:" noon ",这样应该就 ...

  7. HDU 4632 Palindrome subsequence(区间dp,回文串,字符处理)

    题目 参考自博客:http://blog.csdn.net/u011498819/article/details/38356675 题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. ...

  8. POJ 3280 Cheapest Palindrome(区间DP求改成回文串的最小花费)

    题目链接:http://poj.org/problem?id=3280 题目大意:给你一个字符串,你可以删除或者增加任意字符,对应有相应的花费,让你通过这些操作使得字符串变为回文串,求最小花费.解题思 ...

  9. CodeForces-245H:Queries for Number of Palindromes(3-14:区间DP||回文串)

    Times:5000ms: Memory limit:262144 kB 给定字符串S(|S|<=5000),下标由1开始.然后Q个问题(Q<=1e6),对于每个问题,给定L,R,回答区间 ...

随机推荐

  1. Nutch2.3 编译

    $ antBuildfile: build.xmlTrying to override old definition of task javac ivy-probe-antlib: ivy-downl ...

  2. js 页面分享

    首先说分享到QQ空间的通用代码:<a href="javascript:void(0);" onclick="window.open('http://sns.qzo ...

  3. Python--day43--增删改查补充和limit以及order by

    增删改查补充: 增: 删和改: 查: 其他: limit:(具有分页的功能) 分页:

  4. H3C 单路径网络中环路产生过程(1)

  5. C# 如何在项目引用x86 x64的非托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于非托管代码,必须要在x64使用x64的dll,在x86使用x86的dll.在C++没有和C#一样 ...

  6. 【75.28%】【codeforces 764B】Decoding

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. Linux 内核存取 I/O 和内存空间

    一个 PCI 设备实现直至 6 个 I/O 地址区. 每个区由要么内存要么 I/O 区组成. 大部分 设备实现它们的 I/O 寄存器在内存区中, 因为通常它是一个完善的方法(如同在" I/O ...

  8. 【转载】VS Code 中的代码自动补全和自动导入包

    原文连接:https://maiyang.me/post/2018-09-14-tips-vscode/ VSCode 必须安装以下插件: 首先你必须安装 Golang 插件,然后再给 Go 安装工具 ...

  9. shell 脚本文件十六进制转化为ascii码代码, Shell中ASCII值和字符之间的转换

    Shell中ASCII值和字符之间的转换     1.ASCII值转换为字符        方法一: i=97 echo $i | awk '{printf("%c", $1)}' ...

  10. There is no Action mapped for namespace [/] and action name [login] associate解决办法 .

    写了一个JSP项目,在配置struts2时遇到了这个错误,在网上逛了一大圈后终于解决了这个问题.具体解决方法是: 1.struts.xml的名字和位置 这里特别提一点,很多人遇到这个错误都是名字错误, ...