關於子串行什麼什麼的問題,以前一直沒怎麼在意過,直到省賽突然考了乙個赤裸裸的lcis,這下才著急了,因為忘記怎麼做了,而且模版也沒有帶。從第三名一直掉到第11名,而且超上來的,全都是會做這題的o(╯□╰)o。 雖然最後還是保住了乙個一等獎,不過真是太不甘心了。
這裡總結乙個o(nm)的演算法。
設題目給出a,b兩個序列。f[j]表示b序列到j的時候,與a[??]序列構成最長公共上公升子串行的最優解。其中a[??]序列,從1到n列舉過來。
如果某乙個時刻a[i]==b[j],那麼顯然,我們就應該在0到j-1中,找乙個f值最大的來更新最優解。這和求上公升子串行是思想是一樣的。另外,在列舉b[j]的時候,我們順便儲存一下小於a[i]的f值最大的b[j],這樣在更新的時候,我們就可以做到o(1)的複雜度,從而將整個演算法的複雜度保證在o(nm)
view code
#include#include具體練習可以做做hdu 1423和湖南省第八屆程式設計大賽的j題using
namespace
std;
int max(int a,int
b)int a[1010],b[1010
];int f[1010
],n,m;
intlcis()
if(a[i]>b[j]) //
0到j-1中,對於小於a[i]的,儲存f值的最優解}}
int ans=0
;
for(i=0;i)
ans=max(ans,f[i]);
return
ans;
}int
main()
scanf("%d
",&m);
for(j=0;j)
printf(
"%d\n
",lcis());
if(t)
printf("\n
");}
return0;
}
LCIS 最長公共上公升子串行
1004 tyvj1071 lcis最長公共上公升子串行 description 熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上公升子串行,再讓他們研究了最長公共子串行,現在又讓他們要研究最長公共上公升子串行了。小沐沐說,對於兩個串a,b,如果它們都包含一段位置不一定連續的...
LCIS (最長公共上公升子串行)
ac通道 題目含義就是求最長公共上公升子串行 首先考慮,最長公共上公升子串行 最長上公升子串行 最長公共子串行,可以通過lis和lcs的思想去考慮本題目。定義狀態 dp i j 表示a陣列的前i個和b陣列的前j個且以b j 結尾的lcis長度考慮狀態轉移 轉移有兩種情況 a i b j 時候的轉移,...
最長公共上公升子串行(LCIS)
題解熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上公升子串行,再讓他們研究了最長公共子串行,現在又讓他們研究最長公共上公升子串行了。小沐沐說,對於兩個數列a和b,如果它們都包含一段位置不一定連續的數,且數值是嚴格遞增的,那麼稱這一段數是兩個數列的公共上公升子串行,而所有的公...