難度:普及/提高-
題目型別:動規
提交次數:1
涉及知識:線性動規
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包括一行,這一行只包含乙個整數,就是最少需要幾位同學出列。
**:
1 #include2using
namespace
std;
3int a[105];4
int d1[105];5
int d2[105];6
intn;
7int
main()
15for(i = 0; i < n; i++)
16for(j = 0; j < i; j++)
17if(a[j]18 d1[i] = max(d1[i], d1[j]+1
);19
for(i = n; i >= 0; i--)
20for(j = n; j > i; j--)
21if(a[i]>a[j])
22 d2[i] = max(d2[i], d2[j]+1
);23
int maxx = 0;24
for(i = 0; i < n; i++)
25 maxx = max(d1[i]+d2[i], maxx);
26 cout<<n-maxx+1;
27return0;
28 }
備註:
十五分鐘寫完一道題∩_∩,對於這種線性動態規劃已經輕車熟路啦。跟登山基本上一模一樣,最長上公升子串行,從前往後找一次再從後往前找一次,最後找乙個最長的「合唱隊形」。注意最後的答案是總人數減去這個隊形人數,而因為隊形人數最高的那人重複算了兩次,所以要加一~
luogu1091合唱隊形
題目描述 n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i k 你的任務是,已知所有n位同學的身高,計算最少需要幾位...
P1091 合唱隊形
n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身高分別為t1,t2,tk,則他們的身高滿足t1 ti 1 tk 1 i k 你的任務是,已知所有n位同學的身高,計算最少需要幾位同學出列,...
P1091 合唱隊形
nnn位同學站成一排,老師要請其中的 n kn kn k 位同學出列,使得剩下的kkk位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2,k1,2,k1,2,k,他們的身高分別為t1,t2,tkt 1,t 2,t kt1 t2 tk 則他們的身高滿足t1 ti 1 t...