time limit: 3000ms memory limit: 65536k 有疑問?點這裡^_^
乙個數的序列bi,當b
1 < b
2 < ... < b
s的時候,我們稱這個序列是上公升的。對於給定的乙個序列(a
1, a
2, ..., a
n),我們可以得到一些上公升的子串行(a
i1, a
i2, ..., a
ik),這裡1<= i
1 < i
2 < ... < i
k <= n。比如,對於序列(1, 7, 3, 5, 9, 4, 8),有它的一些上公升子串行,如(1, 7), (3, 4, 8)等等。這些子串行中最長的長度是4,比如子串行(1, 3, 5, 8)。
你的任務,就是對於給定的序列,求出最長上公升子串行的長度。
輸入的第一行是序列的長度n (1 <= n <= 1000)。第二行給出序列中的n個整數,這些整數的取值範圍都在0到10000。
最長上公升子串行的長度。
71 7 3 5 9 4 8
4
northeastern europe 2002
想必這是一道很經典的dp題了吧,學dp也有好幾天了,懵懵懂懂的做了幾道題,大多是看著解題報告做的,我想大概提高dp的唯一途徑就是多練習吧--以後每做一道dp都會來貼,還是先總結一下dp解題思路,首先拿到一道dp題(目前本渣還不能在不確定的情況下判斷是否用dp(會不會還兩說。。))首先要把乙個問題分解成子問題,那麼 這個問題的子問題是什麼呢? 要求長度為n的數列的最長上公升子串行,那麼求以a(k) (k=1..n)為終點的數列的最長上公升子串行便是乙個子問題,接下來找狀態,對於每乙個k值,都會對應乙個數(以a(k)為終點最長上公升子串行長度)假設為dp[k] 那麼dp[k]=max
} dp[i]=max+1;
} sort(dp+1,dp+n);
cout } 乙個數的子串bi,當b1 b2 bs的時候,我們稱這個子串是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串 ai1,ai2,aik 這裡1 i1 i2 ik n。如 對於序列 1,7,3,5,9,4,8 有它的一些上公升子串,如 1,7 3,5,9 等等。這些子串中最長... lis問題是最經典的動態規劃基礎問題之一。如果要求乙個滿足一定條件的最長上公升子串行,你還能解決嗎?給出乙個長度為n整數序列,請求出它的包含第k個元素的最長上公升子串行。例如 對於長度為6的序列 2,7,3,4,8,5 它的最長上公升子串行為 2,3,4,5 但如果限制一定要包含第2個元素,那滿足此... description 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3...Dp 最長上公升子串 最長上公升子串行
最長上公升子串行(Dp)
最長上公升子串行 dp