COGS597 交错匹配

6人阅读 评论(0) 收藏 举报
分类:

题意

题意就是给出两个数列a和b,一个交错匹配是这样:

a[i]=b[j]!=a[k]=a[l](i<kj>l)

如果匹配之后连了线,交叉能且只能出现一次。
求出这两个数列最大的匹配数。

题解

先设出状态把。

f[i][j]aibj

显然每次我们都要判断a[i]和b[j]是否和前面的数形成一个交错匹配。
如果不形成匹配,那么就
f[i][j]=max(f[i1][j],f[i][j1])

如果形成匹配,假设数列a中和b[j]匹配的数的位置最靠后的是x,数列b中和a[i]匹配的数的位置最靠后的是y(x<i    y<j)
那么就有
f[i][j]=f[x1][y1]+2

这里为什么一定是最靠后的呢?
因为我们可以显然发现,若i>kj>l,则有f[k][l]f[i][j]
那么就ok了。

code

#include<bits/stdc++.h>
using namespace std;
inline int read()
{
    int num=0;
    bool flag=true;
    char c=' ';
    for(;c>'9'||c<'0';c=getchar())
        if(c=='-')
            flag=false;
    for(;c>='0'&&c<='9';num=num*10+c-48,c=getchar());
    return flag ? num : -num;
}
const int maxn=210;
int n,m,a[maxn],b[maxn];
void init()
{
    n=read();
    m=read();
    for(int i=1;i<=n;i++)
        a[i]=read();
    for(int i=1;i<=m;i++)
        b[i]=read();
}
int f[maxn][maxn];
void DP()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            f[i][j]=max(f[i-1][j],f[i][j-1]);
            if(a[i]!=b[j])
            { 
                int ti,tj;
                for(ti=i;ti>=1;ti--)
                    if(a[ti]==b[j])break;
                for(tj=j;tj>=1;tj--)
                    if(b[tj]==a[i])break;
                //找到最靠后的匹配位置 
                if(ti!=0&&tj!=0)
                    f[i][j]=max(f[i][j],f[ti-1][tj-1]+2);
            }
        }
    printf("%d\n",f[n][m]);
}
int main()
{
    init();
    DP();
    return 0;
}
查看评论

动态规划交错匹配问题

题目题目分析 对动态规划题目的理解不是特别深,所以看了别人的博客进行学习,给出博客地址交错匹配博客,说的非常好也非常详细,但是预处理写的不是很好,我用自己想到的思路写了出来,清晰明白一点。 #in...
  • chen_ze_hua
  • chen_ze_hua
  • 2016-05-16 15:26:01
  • 1178

【cogs 597】【dp】交错匹配

597. 交错匹配★☆ 输入文件:crossa.in 输出文件:crossa.out 简单对比 时间限制:1 s 内存限制:128 MB 【问题描述】有两行自然数, UP[1..N] ...
  • morestep
  • morestep
  • 2015-07-01 17:28:53
  • 1001

网易2018校招内推笔试-交错01串

题目:如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,”10101”,”0101010”都是交错01串。 小易现在有一个01串s,小易想找出一个最长...
  • ljp1919
  • ljp1919
  • 2017-08-13 14:45:09
  • 705

1492. 交错匹配 (jzoj)

题目:题目描述有两行自然数,UP[1..N],DOWN[1..M],如果UP[I]=DOWN[J]=K,那么上行的第I个位置的数就可以跟下行的第J个位置的数连一条线,称为一条K匹配,但是同一个位置的数...
  • Eric1561759334
  • Eric1561759334
  • 2017-04-05 15:35:45
  • 223

jzoj P1492 交错匹配

题目大意: 有两行自然数,up[1..n],down[1..m],如果up[i]=down[j]=k,那么上行的第i个位置的数就可以跟下行的第j个位置的数连一条线,称为一条K匹配,但是同一个位置的数...
  • Gx_Man_VIP
  • Gx_Man_VIP
  • 2017-04-02 15:15:21
  • 196

SSL P2701 交错匹配

题目大意: 给出2行UP[1..N],DOWN[1..M],若UP[I]=DOWN[J]=K,则up[i]跟down[j]连线,称为一条K匹配,但是同一个位置的数最多只能连一条线。另外,每个K匹配都...
  • Gx_Man_VIP
  • Gx_Man_VIP
  • 2017-08-16 20:00:58
  • 171

Photoshop 保存PNG格式交错和不交错有差别

1.PNG格式是由Netscape公司开发出来的格式,可以用于网络图像,但它不同于GIF格式图像只能保存256色,PNG格式可以保存24位的真彩色图像,并且支持透明背景和消除锯齿边缘的功能,可以在不失...
  • meegomeego
  • meegomeego
  • 2012-11-02 11:19:56
  • 16912

交错和 (hihocoder)

求L到R之间的交错和为K的
  • jiangjiashi
  • jiangjiashi
  • 2014-10-08 16:23:20
  • 3115

去交错原理介绍

去交错亦称“反交错”(deinterlacing)是将交错式(即隔行扫描)(interlace)影像讯号转换为渐进式(逐行扫描)(progressive)影像讯号的一种方法。 因为装置处理速度以及带...
  • FrankieWang008
  • FrankieWang008
  • 2011-09-30 17:25:25
  • 2502

Android实现交错的GridView视图

相信大家都有看到过,在很多应用中都出现过安卓自带的GridView控件实现的界面,界面中显示的更多的是规则排列的图或图文并排,但是也存在部分应用界面中显示无规则的图片或图文。这到底是怎么实现的呢?其实...
  • u010214991
  • u010214991
  • 2015-10-20 14:11:26
  • 848
    博客专栏
    数论

    文章:16篇

    阅读:1734
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 1万+
    积分: 1454
    排名: 3万+
    友情链接!