uva1625 顏色的長度

2021-08-14 21:53:37 字數 1201 閱讀 9258

注意每次迴圈中對d陣列的初始化,不需要呼叫

memeset(d,-1,sizeof(d));
因為d陣列申請了maxl=5000+10的空間大小,這個語句在實際執行會很耗時間。而且也並不是d陣列所有的空間都需要初始化。只初始化會用到的值足矣。

#include

#include

#include

#include

using

namespace

std;

#define maxn 26+10

#define maxl 5000+10

#define inf 100000000

int l1=0,l2=0;

int sta_1[maxn];

int end_1[maxn];

int sta_2[maxn];

int end_2[maxn];

char s1[maxl],s2[maxl];

int d[maxl][maxl];

int arr[30];

int com[maxl][maxl];

bool judge(int i,int j,int x)//包括i j及 i j右邊的元素都沒有訪問過的情況下,x是否應該導致m加一

return

false;

}void com_plus()//包括i j及 i j右邊的元素都沒有訪問過

for(int k=1;kint x=s2[k]-64;

if(arr[x]==0&&judge(i,j,x))

m++;

}com[i][j]=m;}}

}int fun(int i,int j)//i j還沒入佇列

if(j<=l2)

temp=min(temp1,temp2);

d[i][j]=temp;

return d[i][j];

}int main()

scanf("%c",&c);

while(c!='\n')

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

for(int j=1;j<=l2+1;j++)

d[i][j]=-1;

com_plus();

cout

<1,1)<}

}

uva1625 顏色的長度

兩個佇列的類似最長公共子串行問題常定義狀態為,分別移動了多少個元素。複雜代價預處理,然後狀態轉換時直接呼叫。滾動陣列可以利用多層來表示相鄰層次關係,利用t 1 來進行0和1的狀態轉換。include include include using namespace std const int maxn...

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個,還需要的最小指標函式。和書上不同 ...