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 ...
随机推荐
- openwrt通过gre回源
创建 ip tunnel add GRE网卡名 mode gre local 本地LAN IP remote SERVER LAN IP ttl 255 ip link set GRE网卡名 up ...
- js 浮点数加、减、乘、除。
1.浮点数加法运算 function numAdd(arg1, arg2) { var r1, r2, m; try { r1 = arg1.toString().split("." ...
- git log 查看修改历史
git log 后面可以跟文件名,表示查看对应文件的修改记录 git log --pretty=oneline --format="%h:%ad:%an:%s" -5 git lo ...
- rclone挂载对象存储到本地
一.原理图 二.挂载步骤 1.申请对象存储资源 (略) 2.下载rclone https://rclone.org/downloads/ 3.上传服务器,解压并安装 sudo unzip rclone ...
- Vue后台管理项目中解决需要配置多个端口号问题
背景 登录接口:http://39.98.123.211:8170/ 商品接口:http://39.98.123.211:8510/ 可见前面是地址是一致的,但是端口号不一样. 这就会导致,登录进得去 ...
- 安装SSMS出现许可证被颁发者直接吊销
出现这种情况,使用以下链接下载rootsupd.exe程序:http://media.kaspersky.com/utilities/CorporateUtilities/rootsupd.zip 运 ...
- 881. 救生艇 (Medium)
问题描述 881. 救生艇 (Medium) 给定数组 people . people[i] 表示第 i 个人的体重 , 船的数量不限,每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人 ...
- Vuex4.x 简介及state、getters、mutations、actions详解(OptionApi 和 CompositionApi)
http://t.zoukankan.com/yaopengfei-p-15439203.html 作 者 : Yaopengfei(姚鹏飞) 博客地址 : http://www.cnbl ...
- 2022-3-16内部群每日三题-清辉PMP
1.项目经理正在为客户管理一个跨国项目,拟采用最新技术替换其电信基础设备.项目经理得知,在某些国家,必须遵循特定的环境规定来处置被替换的硬件.在制定商业论证时,未考虑到这些规定,项目经理应该怎么做? ...
- Software--Java--远程调试
Java 远程调试的原理是两个 VM 之间通过debug 协议进行通信,然后以达到远程调试的目的.两者之间可以通过socket进行通信. 步骤: 1. 首先被 debug 程序的虚拟机在启动时要开启d ...