在本文中,我們主要介紹數(shù)組字符串的內(nèi)容,自我感覺(jué)有個(gè)不錯(cuò)的建議和大家分享下
???? 標(biāo)題: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346
???? 經(jīng)典的LCS水題。。。
???? 用來(lái)入門(mén)是極好的。也是我的第一道dp題。
???? 但是一個(gè)非常坑的點(diǎn)是它的數(shù)據(jù)似乎有單數(shù)組的,這意味著如果用while(gets(a))這樣去做循環(huán)的話(huà)可能會(huì)犯錯(cuò),必須用兩個(gè)串一起讀入才行,這點(diǎn)上我被坑了幾回。。。但貌似有人也用讀單串去寫(xiě)卻沒(méi)有犯錯(cuò)( 見(jiàn)此 ),不知道是我判斷錯(cuò)誤還是其他問(wèn)題。。。
???? 還有一點(diǎn),第一次做dp題,搞懂算法后卻不知道如何讀入字符串才能讓數(shù)組第一位是0,最后是參考了別人代碼后用gets(a+1)這類(lèi)形式讀入字符串,以及strlen(a+1)獲取字符串長(zhǎng)度,豁然開(kāi)朗啊。
???? 后來(lái)我又發(fā)現(xiàn)了其實(shí)可以正常去讀入,在dp的時(shí)候?qū)A存數(shù)組處置時(shí)下標(biāo)都多+1就行了。。。
????
#include<cstdio> #include<cstring> #define MAXN 1010 char a[MAXN], b[MAXN]; int c[MAXN][MAXN]; int max(int a, int b) { if (a > b) return a; return b; } int main() { while (gets(a + 1) && gets(b + 1)) { int al = strlen (a + 1), bl = strlen (b + 1); memset(c, 0, sizeof(c)); for (int i = 1; i <= al; i++) for (int j = 1; j <= bl; j++) if (a[i] == b[j]) c[i][j] = c[i - 1][j - 1] + 1; else c[i][j] = max(c[i - 1][j], c[i][j - 1]); printf("%d\n", c[al][bl]); } return 0; }
文章結(jié)束給大家分享下程序員的一些笑話(huà)語(yǔ)錄: 系統(tǒng)程序員
1、頭皮經(jīng)常發(fā)麻,在看見(jiàn)一個(gè)藍(lán)色屏幕的時(shí)候比較明顯,在屏幕上什幺都看不見(jiàn)的時(shí)候尤其明顯;
2、乘電梯的時(shí)候總擔(dān)心死機(jī),并且在墻上找reset鍵;
3、指甲特別長(zhǎng),因?yàn)榘碏7到F12比較省力;
4、只要手里有東西,就不停地按,以為是Alt-F、S;
5、機(jī)箱從來(lái)不上蓋子,以便判斷硬盤(pán)是否在轉(zhuǎn);
6、經(jīng)常莫名其妙地跟蹤別人,手里不停按F10;
7、所有的接口都插上了硬盤(pán),因此覺(jué)得26個(gè)字母不夠;
8、一有空就念叨“下輩子不做程序員了”;
9、總是覺(jué)得9號(hào)以后是a號(hào);
10、不怕病毒,但是很害怕自己的程序;
數(shù)組字符串uva 10405 - Longest Common Subsequence(最長(zhǎng)公共子序列)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
