tyvj 1067 合唱队形 dp LIS
生活随笔
收集整理的這篇文章主要介紹了
tyvj 1067 合唱队形 dp LIS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
P1067 合唱隊形 時間: 1000ms / 空間: 131072KiB / Java類名: Main
????合唱隊形是指這樣的一種隊形:設K位同學從左到右依次編號為1,2…,K,他們的身高分別為T1,T2,…,TK,??則他們的身高滿足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
????你的任務是,已知所有N位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。
186 186 150 200 160 130 197 220
背景
NOIP2004?提高組?第三道描述
N位同學站成一排,音樂老師要請其中的(N-K)位同學出列,使得剩下的K位同學排成合唱隊形。????合唱隊形是指這樣的一種隊形:設K位同學從左到右依次編號為1,2…,K,他們的身高分別為T1,T2,…,TK,??則他們的身高滿足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
????你的任務是,已知所有N位同學的身高,計算最少需要幾位同學出列,可以使得剩下的同學排成合唱隊形。
輸入格式
輸入文件chorus.in的第一行是一個整數N(2<=N<=100),表示同學的總數。第一行有n個整數,用空格分隔,第i個整數Ti(130<=Ti<=230)是第i位同學的身高(厘米)。輸出格式
輸出文件chorus.out包括一行,這一行只包含一個整數,就是最少需要幾位同學出列。測試樣例1
輸入
8186 186 150 200 160 130 197 220
輸出
4備注
對于50%的數據,保證有n<=20;
對于全部的數據,保證有n<=100。
思路:跑一遍最長上升和最長下降,n小,n*n就行;
#include<bits/stdc++.h> using namespace std; #define ll long long #define esp 0.00000000001 const int N=2e3+10,M=1e6+10,inf=1e9+10,mod=1000000007; int a[N]; int up[N]; int down[N]; int main() {int x,y,z,i,t;while(~scanf("%d",&x)){for(i=1;i<=x;i++)scanf("%d",&a[i]);for(i=1;i<=x;i++)for(t=0;t<i;t++)if(a[i]>a[t])up[i]=max(up[i],up[t]+1);for(i=x;i>=1;i--)for(t=i+1;t<=x+1;t++)if(a[i]>a[t])down[i]=max(down[i],down[t]+1);int ans=inf;for(i=0;i<=x;i++){int minn=inf;for(t=i;t<=x;t++)minn=min(minn,x-i-down[t+1]);ans=min(ans,i-up[i]+minn);}printf("%d\n",ans);}return 0; }?
轉載于:https://www.cnblogs.com/jhz033/p/5730777.html
總結
以上是生活随笔為你收集整理的tyvj 1067 合唱队形 dp LIS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WKWebView进度及title
- 下一篇: jaxws.xsd