区间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 ...
随机推荐
- Retrofit 网络访问框架简单使用
1.引入远程依赖:包括okhttp;retrofit2;retrofit的GSON解析器 compile'com.squareup.okhttp3:okhttp:3.2.0' compile'com. ...
- GCD - Extreme (II) UVA - 11426 欧拉函数与gcd
题目大意: 累加从1到n,任意两个数的gcd(i,j)(1=<i<n&&i<j<=n). 题解:假设a<b,如果gcd(a,b)=c.则gcd(a/c,b ...
- Python函数的返回值和作用域
函数的返回值和作用域 1.返回值 def guess(x): if x > 3: return "> 3" else: retu ...
- PIL库之图片处理
(1)对图片生成缩略图 from PIL import Image im = Image.open("C:\Users\litchi\Desktop\picture1.jpg") ...
- CSS- 一些少用的
1. 字体间距 1.)word-spacing: 2.)letter-spacing: 3.)text-indent 4.)text-align-last: justify; 和 text-align ...
- Linux 常用到的命令
1.按照文件所有属用户和名字查询 find -user mpsp -name \*.bin 2.根据string 字符串查找内容 more +/string test.txt 3.查找文件尾部 后20 ...
- kubernetes的headless service介绍
headless service是一个特殊的ClusterIP类service,这种service创建时不指定clusterIP(--cluster-ip=None),因为这点,kube-proxy不 ...
- Java多台中成员访问特点
多态中的成员访问特点: A:成员变量 编译看左边,运行看左边 B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化 C:成员方法 编译看左边,运行看右边.//因为调用对象时,子 ...
- Zookeepe的安装和集群的配置
Zookeepe的安装和集群的配置 一.Zookeeper的简介 Zookeeper是个框架 二.Zookeeper在Linux上安装 官方提供的下载服务器 地址1:http://mirror.bit ...
- Python操作三大主流数据库
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...