動態規劃32講 第三節 動態規劃入門

2021-06-03 13:30:36 字數 958 閱讀 8051

n位同學站成一排,**老師要請其中的(n-k)位同學出列,使得剩下的k位同學排成合唱隊形。

合唱隊形是指這樣的一種隊形:設k位同學從左到右依次編號為1,2…,k,他們的身高分別為t1,t2,…,tk,  則他們的身高滿足t1<...ti+1>…>tk(1<=i<=k)。

你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。

【輸入檔案】

輸入檔案chorus.in的第一行是乙個整數n(2<=n<=100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數ti(130<=ti<=230)是第i位同學的身高(厘公尺)。

【輸出檔案】

輸出檔案chorus.out包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。

【樣例輸入】

8186 186 150 200 160 130 197 220

【樣例輸出

4【資料規模】

對於50%的資料,保證有n<=20;

對於全部的資料,保證有n<=100。

【問題分析】

出列人數最少,也就是說留的人最多,也就是序列最長。

這樣分析就是典型的最長下降子串行問題。只要列舉每乙個人站中間時可以的到的最優解。顯然它就等於,包括他在內向左求最長上公升子串行,向右求最長下降子串行。

我們看一下複雜度:

計算最長下降子串行的複雜度是o(n2),一共求n次,總複雜度是o(n3)。這樣的複雜度對於這個題的資料範圍來說是可以ac的。但有沒有更好的方法呢?

其實最長子序列只要一次就可以了。因為最長下降(上公升)子串行不受中間人的影響。

只要用f[i]求一次最長上公升子串行,s[i]求一次最長下降子串行。這樣答案就是n-max(f[i]+s[i]-1).

複雜度由o(n3)降到了o(n2)。

【源**】

#include

using namespace std;

int main()

第三講 第三節 旋轉向量與尤拉角

1 旋轉矩陣用9個量表達3個自由度,應該有更緊湊的表達方式 2 旋轉矩陣存在必須是正交矩陣且行列式為1的約束。會給估計和優化旋轉矩陣帶來困難。在三維空間中的任意旋轉都可以表示為以空間中的某一向量為軸,旋轉一定角度。其中,向量反映了這個旋轉的性質,即怎麼轉 而角度則反映了這個旋轉的程度,即旋轉到多大程...

第三週 動態規劃

g 跑跑卡丁車 hdu 1494 dp 可以用dp i 表示在第i段的最小時間,可以用j表示能量槽的個數,最多15個狀態 dp i j 在第i段時的第j個能量槽滿的狀態下的最小時間,可以肯定最先時間為 dp n k n表示圈數,k 1,14 到達15段的時候會自動清零,也不會得到能量 dp i j ...

動態規劃入門篇 揹包九講 (最後三講)

今天我們要講有依賴揹包,揹包求方案數以及揹包求具體方案,咱們先來講有依賴揹包。有依賴揹包是揹包家族中最難的,也是曾經勸退了無數人的題型。先給出題目和 把,如果這個揹包看不懂,那麼可以暫時跳過,因為這對於dp的入門者來說有些難度 有 n 個物品和乙個容量是 v 的揹包。物品之間具有依賴關係,且依賴關係...