pku1692 Crossed Matchings

题目链接: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];

代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值