bzoj 4275 Badania naukowe —— DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4275
枚举 \( C \) 在 \( A \) 和 \( B \) 中的位置,然后取它前后的最长子序列;
\( n^2 \) DP即可,呵呵。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const xn=;
int n,m,l,a[xn],b[xn],c[xn],f[xn][xn],g[xn][xn],pa[xn],pb[xn];
int rd()
{
int ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return f?ret:-ret;
}
int main()
{
n=rd(); for(int i=;i<=n;i++)a[i]=rd();
m=rd(); for(int i=;i<=m;i++)b[i]=rd();
l=rd(); for(int i=;i<=l;i++)c[i]=rd();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
f[i][j]=max(f[i-][j],f[i][j-]);
if(a[i]==b[j])f[i][j]=max(f[i][j],f[i-][j-]+);
}
if(l==){printf("%d\n",f[n][m]); return ;}//
for(int i=n;i;i--)
for(int j=m;j;j--)
{
g[i][j]=max(g[i+][j],g[i][j+]);
if(a[i]==b[j])g[i][j]=max(g[i][j],g[i+][j+]+);
}
memset(pa,-,sizeof pa);
for(int i=;i<=n;i++)
for(int j=i,k=l;j;j--)
{
if(a[j]==c[k])k--;
if(k==){pa[i]=j; break;}
}
memset(pb,-,sizeof pb);
for(int i=;i<=m;i++)
for(int j=i,k=l;j;j--)
{
if(b[j]==c[k])k--;
if(k==){pb[i]=j; break;}
}
int ans=-;
for(int i=;i<=n;i++)
if(pa[i]!=-)
for(int j=;j<=m;j++)
if(pb[j]!=-)ans=max(ans,f[pa[i]-][pb[j]-]+g[i+][j+]);
if(ans==-)puts("-1");//
else printf("%d\n",ans+l);
return ;
}
bzoj 4275 Badania naukowe —— DP的更多相关文章
- 【BZOJ4275】[ONTAK2015]Badania naukowe DP
[BZOJ4275][ONTAK2015]Badania naukowe Description 给定三个数字串A,B,C,请找到一个A,B的最长公共子序列,满足C是该子序列的子串. Input 第一 ...
- [BZOJ 3791] 作业 【DP】
题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...
- [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】
题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...
- BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)
BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...
- BZOJ 4380 [POI2015]Myjnie | DP
链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...
- BZOJ.5311.贞鱼(DP 决策单调)
题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\ ...
- 【BZOJ 3090】 树形DP
3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...
- bzoj 1030 fail树dp
dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #inclu ...
- BZOJ 1831 & 就是一个DP....
题意: 比如说,4 2 1 3 3里面包含了5个逆序对:(4, 2), (4, 1), (4, 3), (4, 3), (2, 1). 可惜的是,由于年代久远,这些数字里有一部分已经模糊不清了,为了方 ...
随机推荐
- JavaWeb、J2-SE开发框架——Spring
相关博客: 2.spring官网 1.使用Spring的jdbcTemplate进一步简化JDBC操作
- IntelliJ IDEA生成 Serializable 序列化 UID 的快捷键
首先创建一个类如Movie,让该类实现Serializable序列化接口. 然后我们需要依次按照以下的方法找到 Settings 之后我们需要以下几个操作,并找到 Serializable class ...
- python 基础 1.6 python 帮助信息及数据类型间相互转换
一. 帮助信息 # dir() 方法 查看函数的方法 # help() # type() 查看类型 name = raw_input('please input you name ...
- tomcat端口问题
https://segmentfault.com/q/1010000008858162?_ea=1777730
- python 基础及资料汇总
Python 包.模块.类以及代码文件和目录的一种管理方案 Numpy 小结 用 Python 3 的 async / await 做异步编程 K-means 在 Python 中的实现 ...
- 我的Android进阶之旅------>Android如何通过自定义SeekBar来实现视频播放进度条
首先来看一下效果图,如下所示: 其中进度条如下: 接下来说一说我的思路,上面的进度拖动条有自定义的Thumb,在Thumb正上方有一个PopupWindow窗口,窗口里面显示当前的播放时间.在Seek ...
- VM tools安装错误The path "" is not a valid path to the xx generic kernel headers.
VMWARE TOOLS安装提示THE PATH IS NOT A VALID PATH TO THE GENERIC KERNEL HEADERSI solved this problem, I g ...
- AppStore App申请审核加速
容芳志大牛一直是我学习的榜样 分类: iOS开发经验技巧2014-11-12 09:40 409人阅读 评论(0) 收藏 举报 有没有遇到上线后发现很严重的bug这种情况,修复bug后提交审核又是漫长 ...
- ubuntu 网络配置及ssh文件传输
一.ubuntu网路配置 参考http://www.cnblogs.com/rusty/archive/2011/04/06/2007139.html /etc/network/interfaces ...
- Spring Boot2.0之整合事物管理
首先Spring 事务分类 1.声明事务 原理:基于编程事务的 2.编程事务 指定范围 扫包去解决 3.事务原理:AOP技术 通过环绕通知进行了拦截 使用Spring 事务注意事项: 不要tr ...