P1091合唱隊列 加最長上公升子串行LIS總結)

2021-08-22 12:05:24 字數 833 閱讀 8630

題目傳送,嗖~~~

先總結一下最長上公升子串行。

1.什麼是最長上公升子串行  給出一組數,求取按遞增順序的最長的一組數,即最長上公升序列。

2.兩種解題思路:

1》dp[i] = 以a[i]結尾的最長上公升子串行長度

遞推: 以a[i]結尾的最長上公升序列有兩種  :1.只包含a[i]2.j狀態轉移方程:if(a[j]2》如果子串行長度相同,則末尾數越小越容易接更多元素(即可能變得更長)即如果數大於末尾元素就把他加在後面,如果小於末尾元素則找到第乙個不大於他的用它來更新陣列。二分查詢,可使複雜度降低。

為啥可行呢?你可能會有這樣的疑問,為啥能拿不是按一定順序的數來更新陣列呢,不會出岔子嗎?

不會的,你可以想一想真正使陣列增長的是這個數大於最後乙個元素,而能使最後乙個元素更新的一定是在他後面的數,因而不會有你所想的順序混亂的存在。

合唱隊列的ac**如下:

#include#include#include#includeusing namespace std;

const int maxn = 110;

int a[maxn];

int dp[maxn],ap[maxn];

//最長公升,最長降(正向反向最長上公升子串行)

int main()

memset(dp, 0, sizeof(dp));

for (int i = 0; i < n; i++)

}int res = 0;

for (int i = 0; i < n; i++)

cout << n-res << endl;

return 0;

}

P1091 合唱隊形 (最長上公升子串行正反利用)

n n 位同學站成一排,老師要請其中的 n kn k 位同學出列,使得剩下的 k k 位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為 1,2,k1,2,k 他們的身高分別為 t 1,t 2,t kt1 t2 tk 則他們的身高滿足 t 1 t t k 1 le i le...

P1091 合唱隊列 動態規劃

洛谷p1091 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 tk 1 i k 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學...

洛谷 P1091合唱隊列

吾王劍之所指,吾等心之所向 fate stay night 題目 這題應該來說,是一道比較經典,也比較簡單的動規題。它的模板性質也很明顯 就是最長上公升子串行 所以應該會動規的看見那個t1ti 1 tk就知道了吧 那這題還要考慮一點點,出去的最少,就意味著留下的最多,那麼lis實錘 只要把每個點為首...