洛谷P1091 合唱隊列 DP

2021-09-25 06:29:03 字數 853 閱讀 6249

題意:給乙個序列,為了使序列為從左到中間、從中間到右分別為遞增、遞減(中間最大),求從序列中刪去的最少元素個數

思路:轉換一下思路,求刪去最少元素即求n-留下最多元素,對於每個中間點i,留下的元素個數等於從左到i求最長遞增子串行和從右到i-1求最長遞增子串行,兩者相加即可得到最長留下長度。首先從左到右求一次,再從右到左求一次,答案即為dp1[i]+dp2[i]-1

#includeusing namespace std;

typedef long long ll;

const int maxn = 105;

int a[maxn], dp1[maxn], dp2[maxn], n;

int main()

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

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

if (a[i] > a[j])

dp1[i] = max(dp1[i], dp1[j]+1);

for (int i = n; i >= 0; i--)

for (int j = n; j > i; j--)

if (a[i] > a[j])

dp2[i] = max(dp2[i], dp2[j]+1);

int ans = 0;

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

ans = max(ans, dp1[i]+dp2[i]-1);

cout << n-ans << endl;

} return 0;

}

洛谷 P1091合唱隊列

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

洛谷 P1091 合唱隊形

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

洛谷 P1091 合唱隊形

p1091 合唱隊形 2k 通過 4.8k 提交 題目提供者洛谷onlinejudge 標籤 noip提高組 2004 雲端評測 難度 普及 提高 提交 討論 題解 最新討論 描述是啥玩意?不能加檔案讀 參考,絕對ac,fighting 動 參考 資料太大了 n 1000 題目描述 n位同學站成一排...