杭州网赛 two rabbits (hdu 4745)
算法很简单,问题是,怎么证明,答案是回文序列.
设a,b走的序列按顺时针是:
a1 , a2 , a3 , ... , ak
b1 , b2 , b3 , ... , bk
考虑端点的2种情况:
1. a1 b1 ... bk ak
2. a1 b1 ... ak bk
对于第一种, 将b1,bk移动到a1,ak ,不会让答案变小, 于是这种情况下的答案为 [i,i+n-1]区间的回文序列长度
对于情况2, bk对应的下标如果小于a1,那么同样可以进行情况1的操作, 如果 bk的下标>a1那么
a,b都在两个不想交的区间移动,并且两个区间的总长小于n, 于是答案仍然为 [i,i+n-1]区间的回文序列长度;
如果bk == a1, 是a,b是从同一个点出发的情况, 答案 为 [i,i+n]区间的回文序列长度-1, 因为起点算了多次,要减1.
#include <map>
#include <queue>
#include <ctime>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long llong;
#define ls ((l+r)<<1)
#define rs (((l+r)<<1)+1)
#define mid ((l+r)>>1)
#define maxn 2010 int n,a[maxn],f[maxn][maxn]; int getvar(int l,int r)
{
if (l>r) return ;
if (l==r) return f[l][r] = ;
if (f[l][r] != -) return f[l][r];
int res = ;
if (a[l]==a[r]) res = getvar(l+,r-)+;
res = max(res,getvar(l+,r));
res = max(res,getvar(l,r-));
return f[l][r] = res;
} int main()
{
freopen("test.txt","r",stdin);
while (scanf("%d",&n))
{
if (!n) break;
for (int i= ; i<=n ; i++ ) scanf("%d",&a[i]);
for (int i= ; i<=n ; i++ ) a[i+n] = a[i];
int ans = ;
memset(f,-,sizeof(f));
for (int i= ; i<=n ; i++ )
{
int tmp = getvar(i,i+n-);
ans = max(ans,tmp);
tmp = getvar(i,i+n) - ;
ans = max(ans,tmp);
}
printf("%d\n",ans);
}
return ;
}
杭州网赛 two rabbits (hdu 4745)的更多相关文章
- 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...
- HDU 4746 HDOJ Mophues 2013杭州网赛I题
比赛的时候就预感到这题能出,但是会耗时比较多.结果最后是出了,但是有更简单的题没出. 是不是错误的决策呢?谁知道呢 题目意思: 定义f(x) = x分解质因数出来的因子个数 如 x = p0 * p0 ...
- 2013成都网赛 G(x) (HDU 4733)
G(x) 思路: 首先搞清楚每个位置上的值有什么意义, 如果第i位的值为1则 第i位与第i+1位不同,反之相同. 然后考虑s1和s2为什么会不一样, 这是由于x+1后比特位进位导致的,于是得出一个性质 ...
- HDU4738【杭州网赛、判桥】
刚拿到这道题时挺有思路,无奈平日里只敲过找割顶的代码,判桥的代码当时自己也没仔细敲. 当时一把泪啊,忽然感觉自己的图论才只是刚搞了个起步啊.. 题目有神坑. 就是先判是否连通,不连通直接输出0; ...
- hdu4740【杭州网赛、模拟、有点搜索?】
当时看了这题就感觉so easy... 本来不想写的,后来感觉是不是可以练一下搜索水平.. 比赛时有人过了就没写. 比赛完了写一下. 实现还不是那么顺利, 囧 本来自己以为这题能练下搜 ...
- 2013杭州网络赛D题HDU 4741(计算几何 解三元一次方程组)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2013杭州网络赛C题HDU 4640(模拟)
The Donkey of Gui Zhou Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- ZOJ Bizarre Routine 2013杭州网赛B题
题目意思: 给定n, expect, a, b 要求你构造一组array[],存放一个1..n的排列,使的下面的程序能输出YES 题目所示代码: bool less_than(x, y) { T++; ...
- HDU 4745 Two Rabbits (2013杭州网络赛1008,最长回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
随机推荐
- c语言typedef运用之结构体
#include <stdio.h> #include <stdlib.h> typedef struct stu { ]; int score; }stu_info; int ...
- event.keyCode列表
Keycode对照表 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 ...
- java获取项目地址或tomcat绝对地址
在java项目中获取文件的路径,不管是相对路径还是绝对路径,其本质都是通过绝对路径去寻找. 获取项目地址 request.getSession().getServletContext().getRea ...
- openwrt上网配置的一些理解
其实已经有很多帖子讲过openwrt路由器上网配置了,我这里主要是讲我自己的一块硬件路由使用openwrt后的一些上网配置.之所以要研究我自己的配置,是因为硬件,硬件不一样,配置也就不一样,但是总的原 ...
- resin安装和配置
1 从 http://www.caucho.com/download/ 下载resin 2 检查你的linux环境,查看是否安装了 jdk1.5 或以上版本,是否安装了perl. 输入命令:Java ...
- 应用highcharts做直观数据统计
最近在看上了统计类的东东,发现以前端图表神器:highcharts Highcharts是一款功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯Js图表库,Highcharts支持的图表类型有直线 ...
- 重写OnPaint事件对窗体重绘 实例1
public class WindowOne:Form { public WindowOne() { InitializeCompnent(); } public void InitializeCom ...
- IP地址基础和子网规划之其一
IP地址的介绍:在TCP/IP环境中,各种各样的终端.工作站能同服务器.其他工作站无缝连接,是因为每一网络节点都使用了全网范围内能够唯一标识节点的IP地址.每个网络有一个全网唯一的网络号,在该网络中各 ...
- hdu4296 贪心
E - 贪心 Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:32768KB 64bit I ...
- C/C++中的函数传值
一.运行如下程序段 #include <iostream> #include <string> #include <cstring> //strcpy #inclu ...