題意不難理解,這裡就不說了。
思路就是開兩個陣列fro[n],back[n],先從頭到尾求一遍lis,記錄在fro[n]中,再從尾到頭求一遍lis,記錄在back[n]中,最後遍歷fro[n],back[n],符合要求的最長佇列就是max(fro[i]+back[i]),最終答案就是n減去這個數了。
注意:這裡求lis是要用樸素的n2演算法,才可以去解這道題,否則可能不行。
#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=1e2+5;
int fro[maxn],back[maxn],h[maxn]; //fro[i]表示以h[i]為結尾的最長遞增子串行,back[i]同理,只是掃瞄順序反了而已
int main()
} if(temp==-inf)
back[i]=1;
else back[i]=temp+1;
} int ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,fro[i]+back[i]); //根據fro,back陣列的定義,不難想出這樣做的對的
cout
}
洛谷 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位同學站成一排...
洛谷P1091合唱隊形
n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i k 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,...