597. 交错匹配

★☆   输入文件:crossa.in   输出文件:crossa.out   简单对照
时间限制:1 s 内存限制:128 MB

【问题描写叙述】

有两行自然数。 UP[1..N] 。 DOWN[1..M] 。假设UP[I]=DOWN[J]=K 。那么上行的第 I 个位置的数就能够跟下行的第 J 个位置的数连一条线,称为一条 K 匹配,可是 同一个位置 的数最多仅仅能连一条线。另外,每个 K 匹配都 必须且至多 跟一个 L 匹配相交且 K ≠ L !

如今要求一个最大的匹配数。

【输入格式】

第一行有两个正整数 N 和 M 。

第二行 N 个 UP 的自然数。第三行 M 个 DOWN 的自然数。

当中

0<N。M<=200, UP、DOWN 的数都不超过 32767 。

【输出格式】

最大匹配数 。

【输入输出例子1】

输入:

crossa.in

12 11
1 2 3 3 2 4 1 5 1 3 5 10
3 1 2 3 2 4 12 1 5 5 3

输出:

crossa.out

8

【输入输出例子2】

输入:

crossa.in

4 4
1 1 3 3
1 1 3 3

输出:

crossa.out

0

题解:

题意略坑。分析例子能够发现事实上是要求 满足每条上下连边(i到j连边条件是a[i]==b[j])都有且仅仅有还有一条连边与之相交 的最多边数。

于是能够dp。f[i][j]表示在a[i],b[j]前满足条件的最大边数。

考虑转移,首先每个状态f[i][j]都是有上两个状态转移来,即

f[i][j]=max(f[i-1][j],f[i][j-1])

然后当前状态是能够由一个新连边状态来尝试更新的,即

f[i][j]=max(f[i][j],f[x-1][y-1]+2)(x,y是新连边状态的位置)

Code:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m,ans=0,a[310]={0},b[310]={0},f[310][310];
int in(){
int x=0; char ch=getchar();
while (ch<'0' || ch>'9') ch=getchar();
while (ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return x;
}
int last(int c[],int w,int k){
for (int i=w-1; i>=1; i--)
if (c[i]==k) return i;
return 0;
}
void dp(){
f[0][0]=f[0][1]=f[1][0]=0;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++){
int x,y;
f[i][j]=max(f[i-1][j],f[i][j-1]);
if (a[i]==b[j]) continue;
x=last(a,i,b[j]);
y=last(b,j,a[i]);
if (x>0 && y>0)
f[i][j]=max(f[i][j],f[x-1][y-1]+2);
}
ans=f[n][m];
}
int main(){
n=in(),m=in();
for (int i=1; i<=n; i++) a[i]=in();
for (int i=1; i<=m; i++) b[i]=in();
dp();
printf("%d\n",ans);
return 0;
}

【cogs 597】【dp】交错匹配的更多相关文章

  1. poj 2955 Brackets (区间dp 括号匹配)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  2. Codeforces 5C Longest Regular Bracket Sequence(DP+括号匹配)

    题目链接:http://codeforces.com/problemset/problem/5/C 题目大意:给出一串字符串只有'('和')',求出符合括号匹配规则的最大字串长度及该长度的字串出现的次 ...

  3. 区间dp括号匹配

    POJ2955 匹配则加一,不需要初始化 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> ...

  4. 区间dp 括号匹配问题

    这道题目能用区间dp来解决,是因为一个大区间的括号匹配数是可以由小区间最优化选取得到(也就是满足最优子结构) 然后构造dp 既然是区间类型的dp 一般用二维 我们定义dp[i][j] 表示i~j这个区 ...

  5. 区间dp - 括号匹配并输出方案

    Let us define a regular brackets sequence in the following way: 1. Empty sequence is a regular seque ...

  6. [POJ2404]Jogging Trails(中国旅行商问题)(一般图的匹配——状压DP)

    题目:http://poj.org/problem?id=2404 题意:有个n(n<=15)的点和m条无向边,每条边都有自己的权值.现在你要从某个点出发,每条边可以经过多次但要保证每条边至少走 ...

  7. bzoj 2806: [Ctsc2012]Cheat 后缀自动机DP

    2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 583  Solved: 330[Submit][Statu ...

  8. poj3267--The Cow Lexicon(dp:字符串组合)

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8211   Accepted: 3864 D ...

  9. 区间DP(区间最优解)题目讲解总结

    1:给出一个括号字符串,问这个字符串中符合规则的最长子串的长度. [分析]区间DP要覆盖整个区间,那么要求所有情况的并集. 先想出状态方程: dp[i][j]:i ~ j区间内最大匹配数目 输出:dp ...

随机推荐

  1. ASP.NET Core 2.0 集成测试无法执行的问题

    问题表现: Microsoft.AspNetCore.Mvc.Razor.Compilation.CompilationFailedException : One or more compilatio ...

  2. 按键精灵 vbs 获取网页源码 xp系统被拒绝

    如下面的代码所示,获取新浪博客某个指定网页的源码 verurl = "http://blog.sina.com.cn/s/blog_9ea1db7b0101o7ch.html?" ...

  3. Mac上配置不同版本的JDK

    Mac上JDK的版本为1.8,编译AOSP时发现需要JDK 1.7.想找一种比较容易切换JDK版本的方式,经过一番Google发现Jenv比较合适. 安装Jenv至少有三种方式: - $ git cl ...

  4. [转]如何查询SQL Server连接数

    1.获取SQL Server允许同时用户连接的最大数 SELECT @@MAX_CONNECTIONS 2.获取当前指定数据库的连接信息 SELECT * FROM master.dbo.syspro ...

  5. OpenCV探索之路(二十七):皮肤检测技术

    好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...

  6. http2.4简单配置

    前言: 上一篇博文说到了http的发展以及http完整请求响应的工作流程. 一.开篇: 从最简单的静态服务器开始. 之前说过,http是应用层协议,必定会在用户空间体现出具体的应用程序.常见的http ...

  7. 用JavaScript实现表格编辑器

    实现效果: htm l代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  8. Grafana+Prometheus系统监控之SpringBoot

    前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot ...

  9. 数细胞-swust oj

    数细胞(0964) 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完 ...

  10. 2943:小白鼠排队-poj

    2943:小白鼠排队 总时间限制:  1000ms 内存限制:  65536kB 描述 N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按 ...