uva1625 顏色的長度

2021-07-16 04:56:01 字數 874 閱讀 9224

兩個佇列的類似最長公共子串行問題常定義狀態為,分別移動了多少個元素。

複雜代價預處理,然後狀態轉換時直接呼叫。

滾動陣列可以利用多層來表示相鄰層次關係,利用t^=1 來進行0和1的狀態轉換。

#include

#include

#include

using namespace std;

const int maxn = 5000 + 5;

const int inf = 1000000000;

char p[maxn], q[maxn]; // starts from position 1

int sp[26], s

q[26], ep[26], eq[26]; // sp[i] start positions of character i in p

int d[2][maxn], c[2][maxn]; // c[i][j]: how many "incomplete" colors in the mixed sequence

int main()

for(int i = 1; i <= n; i++)

for(int i = 1; i <= m; i++)

// dp

int t = 0;

memset(c, 0, sizeof(c));

memset(d, 0, sizeof(d));

for(int i = 0; i <= n; i++) else

if(j)

}t ^= 1;//exchange the state

}printf("%d\n", d[t^1][m]);

} return

0;}

uva1625 顏色的長度

注意每次迴圈中對d陣列的初始化,不需要呼叫 memeset d,1,sizeof d 因為d陣列申請了maxl 5000 10的空間大小,這個語句在實際執行會很耗時間。而且也並不是d陣列所有的空間都需要初始化。只初始化會用到的值足矣。include include include include u...

Uva 1625,顏色的長度

類似於lcs的動態規劃,指標函式的分解。題目大意 兩個顏色序列,將他們合併,合併的時候,每次都從開頭拿顏色,對於每乙個顏色 c來說,都有他的跨度 l c 就是最後的位置與最前的位置的差值,就怎樣的排列是的所有 l c 總和最小。分析 從兩個串中隨機拿字元,解答樹是特別大的。d i,j p拿前 i 個...

UVa1625 顏色長度(DP)

思路 紫書上寫的很詳細了 不是等到乙個顏色全部移完之後再相加,而是每次都計算已經開始但還沒結束的顏色的個數並將長度累加。所以,用res i j 表示第乙個串還剩i個,第二個串還剩j個,已經開始但還沒結束的字元個數。dp i j 表示第乙個還剩i個,第二個串還剩j個,還需要的最小指標函式。和書上不同 ...