acm模版
/*
* 遞增(預設)
* 遞減
* 非遞增
* 非遞減 (1)>= && < (2)< (3)>=
*/const
int maxn = 1001;
int a[maxn], f[maxn], d[maxn]; // d[i] 用於記錄 a[0...i] 以 a[i] 結尾的最大長度
int bsearch(const
int *f, int size, const
int &a)
else
if (a < f[mid])
else
}return -1;
}int lis(const
int *a, const
int &n)
else
if (a[i] > f[size - 1]) // (3)
else
f[j] = a[i];
d[i] = j + 1;
}return size;
}int main()
printf("%d\n", lis(a, n)); // 求最大遞增 / 上公升子串行(如果為最大非降子串行,只需把上面的注釋部分給與替換)
}return
0;}
2017.4.12 23:59 **注釋修正 以 a[i] 結尾 最長有序子串行 經典DP
給一串資料i0 1234 5678 num i 14 7258 369 來得到其對應位上的資料的最長有序子串行的長度l i0 1234 5678 num i 14 7258 369f i 12 3234 345 這是個經典的dp問題。在這裡我們利用f i 的陣列 來儲存其之前資料的最長有序子串行 進...
動態規劃系列二(最長有序子串行)
1 問題描述 乙個數的序列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 ...
最長上公升子串行,最長不下降子串行
最長上公升子串行 include includeusing namespace std const int n 23333 12 int dp n a n int n int binarysearch int k,int len else if k dp mid else mid l r 1 ret...