正经题解|合唱队形
2024-03-22 11:24:15
发布于:浙江
156阅读
0回复
0点赞
其实也是最长序模型,从左往右找到以a[i]结尾的最长上升子序列的长度,从右往左找到以a[i]结尾的最长上升子序列的长度,计算出a[i]为中间人时满足合唱队形时的总人数,找出人数对多的情况,最后输出为总人数
#include<iostream>
#include<cstring>
using namespace std;
int dp1[1005],dp2[1005],a[1005];
int main(){
int m,ans=0;
cin>>m;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int i=1;i<=m;i++){
dp1[i]=1;
for(int j=1;j<i;j++){
if(a[j]<a[i])
dp1[i]=max(dp1[i],dp1[j]+1);
}
}
for(int i=m;i>=1;i--){
dp2[i]=1;
for(int j=m;j>i;j--)
if(a[j]<a[i])
dp2[i]=max(dp2[i],dp2[j]+1);
ans=max(dp1[i]+dp2[i]-1,ans);
}
cout<<m-ans;
return 0;
}
这里空空如也
有帮助,赞一个