應該算是比較經典的一道題目了。無論是按字母順序或者按數字順序,解題的思路都應該是一樣的。
用動態規劃,劃分為子問題,就是每個元素當前位置之前的最長子序列加上它自身這個值,就是當前的最長子序列長度。
總結一下,演算法核心思想就是要找到當前位置元素之前的每個元素對應的最長下降/上公升子串行的最大值,然後將它加一,就等於當前位置的子串行長度值了。其複雜度為$latex o(n^)$.
詳見下**。
以最長下降子串行為例:
#include"stdio.h"
#include"string.h"
int main(void)
sum[i]+=max;
if(sum[i]>maxlen)
maxlen=sum[i];
}printf("%d\n",maxlen);
}return 0;
}
413,動態規劃求最長上公升子串行
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。動態規劃我們用dp i 表示陣列的前i個元素構成的最長上公升子串行,如果要求dp i 我們需要用num i 和前面的數...
求最長上公升子串行和最長非下降子串行
先放題 hdu 5256 序列變換 我們有乙個數列a1,a2.an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。請輸出最少需要修改多少個元素。input 第一行輸入乙個t 1 t 10 t 1 t 10 t 1 t 10 表示有多少組資料 t...
動態規劃 最長上公升子串行
問題描述 乙個數的序列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,4,8 等等...