問題描述
序列Z=<B,C,D,B>是序列X=<A,B,C,B,D,A,B>的子序列,相應的遞增下標序列為<2,3,5,7>。
一般地,給定一個序列X=<x1,x2,…,xm>,則另一個序列Z=<z1,z2,…,zk>是X的子序列,是指存在一個嚴格遞增的下標序列〈i1,i2,…,ik〉使得對于所有j=1,2,…,k使Z中第j個元素zj與X中第ij個元素相同。
給定2個序列X和Y,當另一序列Z既是X的子序列又是Y的子序列時,稱Z是序列X和Y的公共子序列。
你的任務(wù)是:給定2個序列X、Y,求X和Y的最長公共子序列Z。
標簽:
lt
序列
上傳時間:
2014-01-25
上傳用戶:netwolf
動態(tài)規(guī)劃的方程大家都知道,就是
f[i,j]=min{f[i-1,j-1],f[i-1,j],f[i,j-1],f[i,j+1]}+a[i,j]
但是很多人會懷疑這道題的后效性而放棄動規(guī)做法。
本來我還想做Dijkstra,后來變了沒二十行pascal就告訴我數(shù)組越界了……(dist:array[1..1000*1001
div 2]...)
無奈之余看了xj_kidb1的題解,剛開始還覺得有問題,后來豁然開朗……
反復動規(guī)。上山容易下山難,我們可以從上往下走,最后輸出f[n][1]。
xj_kidb1的一個技巧很重要,每次令f[i][0]=f[i][i],f[i][i+1]=f[i][1](xj_kidb1的題解還寫錯了)
標簽:
動態(tài)規(guī)劃
方程
家
上傳時間:
2014-07-16
上傳用戶:libinxny