tyvj 1067 合唱队形 dp LIS
生活随笔
收集整理的這篇文章主要介紹了
tyvj 1067 合唱队形 dp LIS
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
P1067 合唱隊(duì)形 時(shí)間: 1000ms / 空間: 131072KiB / Java類名: Main
????合唱隊(duì)形是指這樣的一種隊(duì)形:設(shè)K位同學(xué)從左到右依次編號(hào)為1,2…,K,他們的身高分別為T1,T2,…,TK,??則他們的身高滿足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
????你的任務(wù)是,已知所有N位同學(xué)的身高,計(jì)算最少需要幾位同學(xué)出列,可以使得剩下的同學(xué)排成合唱隊(duì)形。
186 186 150 200 160 130 197 220
背景
NOIP2004?提高組?第三道描述
N位同學(xué)站成一排,音樂老師要請(qǐng)其中的(N-K)位同學(xué)出列,使得剩下的K位同學(xué)排成合唱隊(duì)形。????合唱隊(duì)形是指這樣的一種隊(duì)形:設(shè)K位同學(xué)從左到右依次編號(hào)為1,2…,K,他們的身高分別為T1,T2,…,TK,??則他們的身高滿足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
????你的任務(wù)是,已知所有N位同學(xué)的身高,計(jì)算最少需要幾位同學(xué)出列,可以使得剩下的同學(xué)排成合唱隊(duì)形。
輸入格式
輸入文件chorus.in的第一行是一個(gè)整數(shù)N(2<=N<=100),表示同學(xué)的總數(shù)。第一行有n個(gè)整數(shù),用空格分隔,第i個(gè)整數(shù)Ti(130<=Ti<=230)是第i位同學(xué)的身高(厘米)。輸出格式
輸出文件chorus.out包括一行,這一行只包含一個(gè)整數(shù),就是最少需要幾位同學(xué)出列。測試樣例1
輸入
8186 186 150 200 160 130 197 220
輸出
4備注
對(duì)于50%的數(shù)據(jù),保證有n<=20;
對(duì)于全部的數(shù)據(jù),保證有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; }?
轉(zhuǎn)載于:https://www.cnblogs.com/jhz033/p/5730777.html
總結(jié)
以上是生活随笔為你收集整理的tyvj 1067 合唱队形 dp LIS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WKWebView进度及title
- 下一篇: jaxws.xsd