日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1091 合唱队形(LIS)

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1091 合唱队形(LIS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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>Ti+1>…>TK(1≤i≤K)T_1<...<T_i>T_{i+1}>…>T_K(1 \le i \le K)T1?<...<Ti?>Ti+1?>>TK?(1iK)。

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

輸入輸出格式

輸入格式:

?

共二行。

第一行是一個整數N(2≤N≤100)N(2 \le N \le 100)N(2N100),表示同學的總數。

第二行有nnn個整數,用空格分隔,第iii個整數Ti(130≤Ti≤230)T_i(130 \le T_i \le 230)Ti?(130Ti?230)是第iii位同學的身高(厘米)。

?

輸出格式:

?

一個整數,最少需要幾位同學出列。

?

輸入輸出樣例

輸入樣例#1: 復制 8 186 186 150 200 160 130 197 220 輸出樣例#1: 復制 4

題意:

給你一個隊列,你要求出來滿足,不能改變序列中每個數的位置

1、全升子序列

2、全降子序列

3、先升后降子序列

?

解法:

就是正著反著各求一次LIS,然后再枚舉i的值就行了

?

注意:長度為len的序列的LIS不一定是dp[len],而是再dp[初始]-------dp[len],之間取最大值

上代碼:

1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 const int maxn=1005; 7 int v1[maxn],dp1[maxn],dp2[maxn],v2[maxn]; 8 void dp(int n,int dp[maxn],int v[maxn]) 9 { 10 for(int i=1;i<=n;++i) 11 { 12 dp[i]=1; 13 for(int j=1;j<i;++j) 14 { 15 if(v[j]<v[i] && dp[j]+1>dp[i]) 16 { 17 dp[i]=dp[j]+1; 18 } 19 20 } 21 //dp[i]=maxx+1; 22 } 23 } 24 int main() 25 { 26 int n; 27 scanf("%d",&n); 28 for(int i=1;i<=n;++i) 29 scanf("%d",&v1[i]); 30 dp(n,dp1,v1); 31 int m=0; 32 for(int i=n;i>0;--i) 33 { 34 v2[++m]=v1[i]; 35 } 36 dp(n,dp2,v2); 37 int sum=0,sum1=0,sum2=0; 38 for(int i=1;i<=n;++i) 39 { 40 sum1=sum2=0; 41 for(int j=1;j<=i;++j) 42 sum1=max(sum1,dp1[j]); 43 for(int j=1;j<=n-i;++j) 44 sum2=max(sum2,dp2[j]); 45 sum=max(sum,sum1+sum2); 46 } 47 for(int i=1;i<=n;++i) 48 { 49 sum1=sum2=0; 50 for(int j=1;j<=n-i;++j) 51 sum1=max(sum1,dp1[j]); 52 for(int j=1;j<=i;++j) 53 sum2=max(sum2,dp2[j]); 54 sum=max(sum,sum1+sum2); 55 } 56 printf("%d\n",n-sum); 57 } View Code

?

轉載于:https://www.cnblogs.com/kongbursi-2292702937/p/11006934.html

總結

以上是生活随笔為你收集整理的P1091 合唱队形(LIS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。