[線性dp] 合唱隊形(最長上升子序列模型)
文章目錄
0. 前言
相關:
強相關:
1. LIS 變種模型
重點: 線性 dp
、LIS 問題
思路:
- 先嚴格上升、再嚴格下降。則正向求一遍
LIS
、反向再求一遍LIS
,兩者相加再減去重複點 1 即可 - 和 [線性dp] 登山(最長上升子序列模型) 同源,踢出去最少的人,等價於找到最長的上升、下降子序列。就最後把答案
res
換成n - res
就行了。其它cv
即可 - 時間複雜度: O ( n 2 ) O(n^2) O(n2)
本題為 NOIP2004
提高組原題。
正反兩遍再求和程式碼:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1005;
int n;
int a[N];
int f[N], d[N];
int main() {
cin >> n;
for (int i = 0; i < n; ++i) cin >> a[i];
for (int i = 0; i < n; ++i) {
f[i] = d[i] = 1;
for (int j = 0; j < i; ++j)
if (a[i] > a[j])
f[i] = max(f[i], f[j] + 1);
}
for (int i = n - 1; i >= 0; --i) {
d[i] = 1;
for (int j = n - 1; j >= i; --j)
if (a[i] > a[j])
d[i] = max(d[i], d[j] + 1);
}
int res = 0;
for (int i = 0; i < n; ++i) res = max(res, f[i] + d[i] - 1);
cout << n - res << endl;
return 0;
}
相關文章
- 線性dp--最長上升子序列變形
- 線性dp:最長上升子序列
- 線性dp:最長公共子序列
- 最長上升子序列
- 動態規劃-最長上升子序列模型動態規劃模型
- 最長上升子序列LIS 詳解+變形+擴充
- 線性dp:最長公共子串
- 線性dp:LeetCode516 .最長迴文子序列LeetCode
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- DP筆記最長上升子序列(LIS)以及零件分組問題筆記
- 動態規劃7:最長上升子序列LIS動態規劃
- 動態規劃求解最長上升子序列問題動態規劃
- 最長上升子序列(LIS)的兩種演算法演算法
- 線性dp:LeetCode674. 最長連續遞增序列LeetCode
- 【部分轉載】:【lower_bound、upperbound講解、二分查詢、最長上升子序列(LIS)、最長下降子序列模版】
- 最長公共子序列
- Codeforces Round #323 (Div. 2) D LIS 最長上升子序列
- 最長公共子序列(JAVA)Java
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- ZOJ 2319 最長上升子序列並輸出組成該序列的元素編號
- 北京大學郭煒-最長上升子序列 動態規劃講解動態規劃
- bzoj3173: [Tjoi2013]最長上升子序列(樹狀陣列)陣列
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- java 實現 最長公共子序列Java
- 最長公共子序列求方案數
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 最長等差數列;及子序列分析
- 演算法題:最長公共子序列演算法
- 動態規劃(最長公共子序列LCS)動態規劃
- LCS 演算法:Javascript 最長公共子序列演算法JavaScript
- 最長公共子序列的程式碼實現
- NlogN 求最長不下降子序列(LIS)
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- 線性dp