pku1692 Crossed Matchings

来源:互联网 发布:印度对华反倾销数据 编辑:程序博客网 时间:2024/04/20 00:46

题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1692

题意简述:题目给出上下两排数字,相等的数字可以划一条线,同时,这边线必须与其他有且只有一条匹配的线相交,而且a[i]!=a[i'],求最大的匹配方案。

解题思路(转别人的):一道类似于最长公共子序列的问题,略有变化,但思想是一样的。这题用到了两次DP,先来说下思路:用 opt[i][j]来表示第一个字符串S1前i位和第二个字符串S2前j位可能达到的最大匹配对数,则对于opt[i][j]有三种情况:一是无法匹配,二是可以匹配,但是匹配后总数减少或不变,即它打破了之前的匹配情况,此时,opt[i][j]= Max(opt[i][j-1],opt[i-1][j]),三是S1[i]S2[j]可以与S2[q]S1[p]匹配且总数增加,此时,opt[i] [j]=opt[p-1][q-1]+2。而pq的取得要用到第二次DP,以S1为例,用ma[i][j]表示S1[i]与S2前j个字符中相同的最大位置,则列出状态方程:ma[i][j]=j-1,S1[i]==S2[j-1];ma[i][j]=ma[i][j-1],S1[i]!=S2[j- 1];

代码: