LCS LIS 基礎演算法及路徑儲存

2021-08-22 13:42:57 字數 2203 閱讀 7460

dp[ i+1 ][ j+1 ]=dp[ i ][ j ]+1                                              ( s[i]==t[j]  )

dp[ i+1 ][ j+1 ]=max(dp[ i ][ j+1 ] , dp[ i+1 ][ j ] )              (其他)

看了好多大神的部落格,總結了以下**:

#includeusing namespace std;

const int max_n=2005;

string s,t;

int dp[max_n][max_n];

int pre[max_n][max_n]; //標記路徑

vectorans; //儲存路徑

void output(int x,int y)

else if(pre[x][y]==2)

else if(pre[x][y]==3)

}int main()

else

} }

cout<

pre陣列和output函式是用來儲存路徑的,不需要的話直接去掉就行。

dp[ i ] :以a[ i ] 為結尾的最長上公升子串行的長度:

以a[i]為結尾的上公升子串行有兩類:

1:只包含a[ i ]的子串行,元素個數為1  ,(一開始就對左右元素的dp值初始化為1);

2:在滿足j < i 並且 a[ j ] < a[ i ] 的以a[ j ]結尾,追加上a[ i ]得到的子序.

(1)o(n^2)複雜度解決方案:

#includeusing namespace std;

const int max_n=2005;

int a[max_n];

int dp[max_n];

int pre[max_n]; //標記路徑,記錄前驅

int max_pos = 0; //最大位置

vectorans; //儲存路徑

void dfs(int pos)

else

}int main()

int res = 0; //最長上公升子串行的長度

memset(pre,-1,sizeof(pre));

for(i=0;ia[j] && dp[i]=res)}}

}cout

dp[ i ] :長度為i+1的上公升子串行中末尾元素的最小值(不存在即為inf)

這個dp陣列的更新非常有意思,自己可以下去模擬一下,但是要注意,dp陣列只能儲存最長上公升子串行的長度,而不能儲存正確的子串行。

比如 1 3  5 2 :dp陣列最後儲存的會是1 2 5 ,顯然,這不是正確的順序。

那麼怎麼儲存路徑呢?

傳送門 (lis路徑還原)

#includeusing namespace std;

const int max_n=2005;

const int inf=0x3f3f3f3f;

int a[max_n];

int dp[max_n];

int pre[max_n]; //標記路徑,記錄前驅

int pos[max_n];

vectorans; //儲存路徑

void output(int pos)

ans.push_back(pos+1);

}int main()

fill(dp,dp+n,inf);

pos[0]=-1;

int i,now;

for(i=0;i

int k=lower_bound(dp,dp+n,inf)-dp;

cout<

output(pos[k-1]);

for(int i=0;i

}}

最短路徑演算法及解析

深入解析最短路徑演算法 正文第一節 問題的提出及解決方法 所謂最短路徑問題,可以說有兩種情況來描述。描述一 在圖論中,指的是尋找圖中兩個節點之間的最短距離。如下圖 描述二 在現實生活中,指的是找到從乙個地方到另乙個地方的最近距離。如下圖 上述兩種情況的本質是一樣的,即求乙個點到另乙個點的最短路徑。好...

板子 Floyd演算法及路徑記錄

floyd演算法實現 將距離矩陣初始化為鄰接矩陣,然後做乙個三層的for迴圈 至於給出路徑只要對path二維陣列進行遞迴就行了 int matrix n n int dist n n int path n n for int i 0 i n i floyd演算法實現 for int k 0 k n ...

Plist檔案儲存及沙盒路徑詳解

property list屬性列表檔案 它是一種用來儲存序列化後的物件的檔案。屬性列表檔案的擴充套件名為.plist 因此通常被稱為 plist檔案。檔案是xml格式的。plist檔案通常用於儲存使用者設定,也可以用於儲存 的資訊。1 工程裡的檔案路徑 nsbundle bundle nsbundl...