這是一道練習dp的無聊 經典題目
分析
讀完題目,很明顯,最後的合唱隊形是乙個遞增序列加上乙個遞減序列。那麼,我們可以先列舉中間最高的那個人,接著對他的左邊求最長上公升序列,對右邊求最長下降序列,總的時間複雜度為o(n³),比較危險 。如何節省時間呢?只需要先求好最長上公升dp1[1…n]和最長下降dp2[1…n],然後再列舉中間最高的那個同學,每一種合唱隊形的長度為dp1[i]+dp2[i]-1,打擂台取最大值ans那麼答案就為n-ans。這樣做的時間複雜度為o(n²)。
相信dalao看完分析就不用看本蒟蒻的**了
#include
using
namespace std;
const
int n=
2010
;int h[n]
,f[n]
,g[n]
;int n,ans;
intmain()
for(
int i=n;i;i--
)for
(int i=
1;i<=n;i++
) ans=
max(ans,f[i]
+g[i]-1
);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位同學的身高,計算最少需要幾位同學出列,...