/*
*問題描述:求最長上公升子串行長度
*/#include #include #include using namespace std;
const int maxn = 1010;
int a[maxn];//儲存輸入的資料
int maxlen[maxn];//儲存從開始到每乙個資料中最長上公升子串行長度
int main()
for(int i =2;i<=n;i++)
cout <
return 0;
}
執行結果;
總結:能用動態規劃解決的問題的特點
1、問題具有最優子結構的性質。如果問題的最優解所包含的
子問題的解也是最優的,我們就稱該問題具有最優子結構性質
2、無後效性。當前的若干狀態值一旦確定,則此後過程的演變就只和這若干狀態的值有關,和之前是
採取哪種手段或經過那條路徑演變到當前的這若干個狀態,沒有關係
最長上公升子串行長度 LIS O nlogn 演算法
此前在動態規劃一講 動態規劃 3 最長遞增子串行 曾說過此問題,當前是的雙重迴圈是o n 2 的複雜度。後來在網上看到說lis問題有o nlogn 的演算法,於是拿來小研究了一下。這個演算法其實已經不是dp了,有點像貪心。至於複雜度降低其實是因為這個演算法裡面用到了二分搜尋。本來有n個數要處理是o ...
最長上公升子串行求長度
普通dp 複雜度o 2 1 include 2 using namespace std 34 const int n 1010 5 inta n dp n n 67 intmain 1819 int res 0 20 for int i 1 i n i 21 res max res,dp i 222...
413,動態規劃求最長上公升子串行
給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。動態規劃我們用dp i 表示陣列的前i個元素構成的最長上公升子串行,如果要求dp i 我們需要用num i 和前面的數...