题目: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的更多相关文章

  1. 【BZOJ4275】[ONTAK2015]Badania naukowe DP

    [BZOJ4275][ONTAK2015]Badania naukowe Description 给定三个数字串A,B,C,请找到一个A,B的最长公共子序列,满足C是该子序列的子串. Input 第一 ...

  2. [BZOJ 3791] 作业 【DP】

    题目链接:BZOJ - 3791 题目分析 一个性质:将一个序列染色 k 次,每次染连续的一段,最多将序列染成 2k-1 段不同的颜色. 那么就可以 DP 了,f[i][j][0|1] 表示到第 i ...

  3. [BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

    题目链接:BZOJ - 2165 题目分析: 这道题我读了题之后就想不出来怎么做,题解也找不到,于是就请教了黄学长,黄学长立刻秒掉了这道题,然后我再看他的题解才写出来..Orz 使用 DP + 倍增 ...

  4. BZOJ.3425.[POI2013]Polarization(DP 多重背包 二进制优化)

    BZOJ 洛谷 最小可到达点对数自然是把一条路径上的边不断反向,也就是黑白染色后都由黑点指向白点.这样答案就是\(n-1\). 最大可到达点对数,容易想到找一个点\(a\),然后将其子树分为两部分\( ...

  5. BZOJ 4380 [POI2015]Myjnie | DP

    链接 BZOJ 4380 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]. 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个 ...

  6. BZOJ.5311.贞鱼(DP 决策单调)

    题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\ ...

  7. 【BZOJ 3090】 树形DP

    3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...

  8. bzoj 1030 fail树dp

    dp[i][j][0]代表当前匹配到i号点走了j步且没到过单词节点,1代表到过,直接转移. #include<iostream> #include<cstdio> #inclu ...

  9. BZOJ 1831 & 就是一个DP....

    题意: 比如说,4 2 1 3 3里面包含了5个逆序对:(4, 2), (4, 1), (4, 3), (4, 3), (2, 1). 可惜的是,由于年代久远,这些数字里有一部分已经模糊不清了,为了方 ...

随机推荐

  1. Urho3D 在Win10下编辑器崩溃的解决方案

    本解决方案来自于 https://github.com/urho3d/Urho3D/issues/2417 描述 在Win10中通过CMake启用URHO_ANGELSCRIPT选项的前提下生成Urh ...

  2. spring中xml配置和autowired混用

    1.类的混用: 配置文件中的配置: <bean id="a" class="com.ab.cc.A" /> 类中的配置 @Autowired A a ...

  3. jdbc 链接池的优化

    package cn.itcast.jdbc.datasourse; import java.sql.Connection;import java.sql.DriverManager;import j ...

  4. KVM+VNC 虚拟机远程管理

    1.安装kvm grep -E -o 'vmx|svm' /proc/cpuinfo #检查服务器是否支持虚拟化(vmx为interl平台.svm是AMD平台) #安装KVM所需软件包: yum gr ...

  5. 使用Erlang和Thrift,与Hbase通信(转)

    操作系统是Ubuntu Server 12.10 先安装Thrift sudo apt-get install libboost-dev libboost-test-dev \ libboost-pr ...

  6. Linq Group By 多个字段

    var counts = dal.QueryStatisticsCount(condition); var result = from p in counts group p by new { Auc ...

  7. php异步任务处理: gearman

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡 准备软件包 gearmand-1.1.12.tar.gz gearman-1. ...

  8. 全能,OnSize的使用,部分覆盖后重画,都没有问题

    import wx class View(wx.Panel): def __init__(self, parent): super(View, self).__init__(parent) self. ...

  9. Spring/Java error: namespace element 'annotation-config' … on JDK 1.5 and higher

    Extract the jar file: mkdir spring cd spring jar xvf ../spring.jar Check the Spring version in META- ...

  10. [容易]Fizz Buzz 问题

    题目来源:http://www.lintcode.com/zh-cn/problem/fizz-buzz/