給定兩個字串ch1 abcdef和ch2 atbtttc。求他們最長的公共子串行的長度。我們定義乙個maxlen(i,j)表示ch1[i-1]和ch2[j-1]的長度。
當ch1[i-1]==ch[j-1] maxlen[i][j]=maxlen[i-1][j-1]+1
當ch1[i-1]!=ch[j-1] maxlen[i][j]=max(maxlen[i-1][j],maxlen[i][j-1])
#include
using namespace std;
int longeststring(char *ch1, char *ch2)
for (int i = 0; i <= length1; i++)
for (int i = 0; i <= length2; i++)
for (int i = 1; i <= length1; i++)
else
else}}
}return maxlongest[length1][length2];
}int main()
動態規劃,常常學啊。
c++11的原子操作
不使用原子操作:
#include
#include
#include
#include
using namespace std;
int sum = 0;
void func()
}int main()
for (int i = 0; i < 10; i++)
cout << "sum = " << sum << endl;
system(「pause」);
return 0;
}執行一千次有一千個sum
我們如果對sum使用原子變數,俺麼就不會出現上述的情況。
#include
#include
#include
#include
using namespace std;
std::atomic_long sum = 0;
//long sum = 0;
void func()
}int main()
for (int i = 0; i < 10; i++)
cout << "the sum = " << sum << endl;
system("pause");
return 0;}
這樣就可以得到正確的結果
原子意味著不可分割。確保每個執行緒拿到的資料是獨一無二的。可以用陣列表示的多執行緒演算法設計的時候,可以使用。或者計算當前的執行緒數量。
最長公共子串行的長度
對於兩個字串,請設計乙個高效演算法,求他們的最長公共子串行的長度,這裡的最長公共子串行定義為有兩個序列u1,u2,u3.un和v1,v2,v3.vn,其中ui給定兩個字串a和b,同時給定兩個串的長度n和m,請返回最長公共子串行的長度。保證兩串長度均小於等於300。測試樣例 1a2c3d4b56 10...
(11)最長公共子串行
include using namespace std void testlongestcommenstring 1 3 4 5 5 and 2 4 5 5 7 6 最長公共子串行是 4 5 5 動態規劃問題 c i j c i 1 j 1 1 a i b j max a i b j 1.根據轉移方...
最長公共子串行和最長公共子串 C
一 給定兩個字串s1和s2,求兩個字串的最長公共子串行的長度。輸入樣例 abcd aebd 輸出樣例3解釋 s1和s2的最長公共子串行為abd,長度為3 思路動態規劃 lcs m,n 表示s1 0 m 和s2 0 n 的最長公共子串行的長度 s1 m 1 s2 n 1 lcs m,n 1 lcs m...