Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我那样做的

Posted by ZaakDov at 2009-04-08 10:36:05 on Problem 3356 and last updated at 2009-04-08 10:41:43
In Reply To:难道是BUG, 求正确方法 Posted by:longpo at 2009-01-15 15:46:14
先求LCS,并记录Path,即LCS具体用了哪些位置的字符对应,然后对所有LCS的路径(它可能有很多个LCS)遍历,进行如下处理。

比如:

题目给的样例:

第一种LCS:
AGT(AAG)T( )A(G)GC
|||  3  | 1 | 1 ||
AGT( C )T(G)A(C)GC
3+1+1=5

第二种LCS:
AGT(AA)G(T)A(G)GC
|||  2 | 1 | 1 ||
AGT(CT)G( )A(C)GC
2+1+1=4

即找出所有不对应的块,每次选择最长的块长度累加

把几种LCS最小的找出来就AC了

正确性证明是对于所有的方法,它没有改动的字母必然组成一个公共子序列,如果它不是最长公共子序列,那么它必然真包含于某个LCS,而以这个LCS作为基础一定能得到更少步骤的方法,故最优方法必然是以某一LCS为基础,于是穷举所有LCS,来试试谁最优。

对于楼上的“显然这是不对的”(指直接用最长串减LCS方法)所给出的反例,
我这个也能行。

只有一种LCS:
(A)GT( )
 1 || 1
( )GT(C)
1+1=2

不过应该能有更好方法,毕竟我这个954ms,惭愧!

我觉得在DP方面肯定能有所改进。

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator