hdu:Two Rabbits(区间DP)
Problem Description
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.
Input
The 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.
Output
For each test case, print a integer denoting the maximum turns.
输入样例
1
1
4
1 1 2 1
6
2 1 1 2 1 3
0
输出样例
1
4
5
本题关键在理解题意,求最长环形回文串,枚举断点两端最长回文串长度之和即为答案
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N];
int dp[N][N];
int n;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
while(cin>>n,n)
{
int maxn=-1;
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;++i)
{cin>>a[i];dp[i][i]=1;}
for(int len=2;len<=n;++len)//枚举区间长度
for(int i=1;i<=n;++i)
{
int j=i+len-1;//终点
if(j>n) break;
dp[i][j]=max(dp[i+1][j],dp[i][j-1]);
if(a[i]==a[j])
dp[i][j]=max(dp[i][j],dp[i+1][j-1]+2);
}
for(int i=1;i<=n;++i)
{
maxn=max(maxn,dp[1][i]+dp[i+1][n]);
}
cout<<maxn<<'\n';
}
return 0;
}
hdu:Two Rabbits(区间DP)的更多相关文章
- hdu 4745 Two Rabbits 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerr ...
- hdu 5396 Expression(区间dp)
Problem Description Teacher Mai has n numbers a1,a2,⋯,anand n−1 operators("+", "-&quo ...
- You Are the One HDU - 4283 (区间DP)
Problem Description The TV shows such as You Are the One has been very popular. In order to meet the ...
- Dire Wolf HDU - 5115(区间dp)
Dire Wolf Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total ...
- HDU 5568 sequence2 区间dp+大数
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5568 题意: 求所有长度为k的严格升序子序列的个数. 题解: 令dp[i][k]表示以i结尾的长度为 ...
- HDU4745 - Two Rabbits(区间DP)
题目大意 给出一个长度为n的环状序列,两只兔子各自从一个点出发,一个顺时针跳,一个逆时针跳,每个时刻都要求两只兔子所在的数字是相同的,兔子最多跳一个圈~~~问兔子们最多能跳多少次 题解 一个逆时针跳, ...
- hdu 4579 博弈+区间dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 #include <cstdio> #include <cstring> ...
- Hdu 2513 区间DP
Cake slicing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total ...
- HDU 4283---You Are the One(区间DP)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=4283 Problem Description The TV shows such as Y ...
随机推荐
- php 滑动图片验证生成
1.话不多说,直接干货,喜欢的希望大家一键三连 <?php namespace App\Model; class VerifyImage { //浮层坐标数组 protected $tailor ...
- ANT+JMETER+Jenkins 接口自动化
Linux环境下搭建:ANT+JMETER+Jenkins 接口自动化 一.准备环境: 1.下载 JDK1.8 JDK下载地址:https://www.oracle.com/java/technolo ...
- 前端循环及跳出for循环
前端循环语句与方法 while循环 语法 1.初始化变量 2.while(条件表达式){逻辑代码循环体} 执行过程: 1.执行初始化变量 2.变量是否满足条件表达式 3.满足执行循环体 4.条件不满足 ...
- 从零搭建php环境-php8-扩展-redis
一.下载1.https://pecl.php.net/get/redis-5.3.2.tgz下载到本地,文件传输上传到 /usr/local/src/2.wget -P /usr/local/src/ ...
- python 列表中随机抽取多个数
方法一:[random.randint(0,100) for _ in range(2)]输出: [34, 44]方法二:list中随机去取K个数list=[1,2.3,......] random. ...
- 1.1 安装gin框架&使用gin编写简单服务端
01.安装gin框架 1)go环境配制 a)配制环境变量 GOPATH修改为go的工作文件夹路径 D:\Golang\goproject GOROOT修改为go的安装路径 D:\Golang\go1. ...
- Keil 2032 license 解决方法(keygen)
https://pan.baidu.com/s/1nH_KrsHoLEJlJQKhfIoXHA
- 将map转为Bean的工具类 BeanUtil
Map<String,Object> pbclwhMainMap = (Map<String,Object>)param.get("pbclwhMain") ...
- TMP_InputField 理解
一.输入框激活问题 public void ActivateInputField(); //激活输入框 public void DeactivateInputField(bool clearSelec ...
- HTML完整语法学习
https://www.cnblogs.com/douluo/archive/2021/11/20/15582217.html