区间dp C - Two Rabbits
C - Two Rabbits
这个题目的意思是,n块石头围一圈。一只兔子顺时针,一只兔子逆时针(限制在一圈的范围内)。
这个题目我觉得还比较难,不太好想,不过后来lj大佬给了我一点点提示,因为是需要跳到相同的重量的石头上去,
所以这个就和回文序列有关系了,我也明白和回文序列有关系了,因为他们是不同方向的,而且又要跳到相同重量的石头上去,
所以这个就说明我需要找一段回文序列,找到的这段回文序列的长度就是兔子可以跳的长度,所以我们应该求这一段区间的最长回文子序列。
但是注意,这个和普通的回文不太一样,就是普通的回文我们需要的是最长回文子串,这个我们只需要最长回文子序列,意思就是说可以跳过一部分石头。
知道这个之后,其实我还是不太会处理这个环状的回文子序列,然后又看了一下题解,说可以把环变成链,
其实这种处理方式之前见过,不过一下子没有反应过来,处理完这个之后,就是来进行区间dp,求一个区间的最长的回文子序列。
这个有了区间dp之后其实还比较好求,因为不是一定要挨在一起,所以就定义dp[i][j]表示从i到j的最长的回文子序列。
转移方程就是 if(s[i]==s[j]) dp[i][j]=dp[i+1][j-1]+2 else dp[i][j]=max(dp[i+1][j],dp[i][j-1])
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = ;
int dp[*maxn][*maxn];
int a[maxn*];
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n)
{
memset(dp, , sizeof(dp));
for(int i=;i<=n;i++)
{
scanf("%d", &a[i]);
dp[i][i] = ;
a[i + n] = a[i];
}
int ans = ;
for(int i=;i<=n;i++)
{
for(int j=;j+i-<=*n;j++)
{
int ends = j + i - ;
if (a[j] == a[ends]) dp[j][ends] = dp[j + ][ends - ] + ;
else dp[j][ends] = max(dp[j + ][ends], dp[j][ends - ]);
ans = max(ans, dp[j][ends]);
}
}
for(int i=;i<=n;i++)
{
ans = max(ans, dp[i][i + n - ]);
ans = max(ans, dp[i][i + n - ] + );
}
printf("%d\n", ans);
}
return ;
}
区间dp
区间dp C - Two Rabbits的更多相关文章
- HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
Two Rabbits Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total ...
- 2018.10.23 hdu4745Two Rabbits(区间dp)
传送门 区间dp经典题目. 首先断环为链. 然后题目相当于就是在找最大的回文子序列. 注意两个位置重合的时候相当于范围是n,不重合时范围是n-1. 代码: #include<bits/stdc+ ...
- hdu 4745 Two Rabbits 区间DP
http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerr ...
- 区间dp总结
poj 1141 Brackets Sequence 基础的区间dp题,注意dp边缘的初始化,以及递归过程中的边界 poj 2955 Brackets 依旧注意初始化,水题 hdu 4745 Two ...
- 算法复习——区间dp
感觉对区间dp也不好说些什么直接照搬讲义了2333 例题: 1.引水入城(洛谷1514) 这道题先开始看不出来到底和区间dp有什么卵关系···· 首先肯定是bfs暴力判一判可以覆盖到哪些城市····无 ...
- 区间dp专题练习
区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...
- 【BZOJ-4380】Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 区间DP LightOJ 1422 Halloween Costumes
http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...
随机推荐
- Java学习成长第一集
由于最近所在项目组的项目临近结尾,所以有时间对自己近来的学习做个总结.不得不说,程序员不学习就退步这句话是真的很让人信服!自己入行将近一年的时间,所学的就是Java开发的专业,很羞愧的是现在的自己能力 ...
- 008-进制-C语言笔记
008-进制-C语言笔记 学习目标 1.[掌握]include预处理指令 2.[掌握]多文件开发 3.[了解]认识进制 4.[掌握]进制之间的互相转换 5.[掌握]原码,反码,补码 6.[掌握]位运算 ...
- AJ学IOS(38)UI之核心动画简介
AJ分享,必须精品 核心动画(简介) Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就 ...
- Laravel 5.8 RCE 分析
原帖地址 : https://xz.aliyun.com/t/6059 Laravel 代码审计 环境搭建 composer create-project --prefer-dist laravel/ ...
- 基于nodejs的游戏服务器
开源一个四年前自己写的node服务器,有兴趣的可以继续开发-- 架构为mysql,redis,node. 数据格式为 protocol buff 如果只做简单的演示,这个架构非常适合你.. 还是typ ...
- tensorflow1.0 dropout层
""" Please note, this code is only for python 3+. If you are using python 2+, please ...
- numpy+sklearn 手动实现逻辑回归【Python】
逻辑回归损失函数: from sklearn.datasets import load_iris,make_classification from sklearn.model_selection im ...
- 架构设计 | 分布式业务系统中,全局ID生成策略
本文源码:GitHub·点这里 || GitEE·点这里 一.全局ID简介 在实际的开发中,几乎所有的业务场景产生的数据,都需要一个唯一ID作为核心标识,用来流程化管理.比如常见的: 订单:order ...
- 详解 Discuz 的 PHP经典加密解密函数 authcode
函数注释: // $string: 明文 或 密文 // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function auth ...
- git取消跟踪(unversion)
有时候我们会git add了一些不想跟踪的文件,通过下面的命令可以在没提交前从index里删掉跟踪记录(保留本地文件) git rm –cached 文件名