题解 | #合唱队形#

合唱队形

https://www.nowcoder.com/practice/0045cd3e39634a66ada63c2adeb49234

该题用dp做
该队形是中间最高俩边为低
用俩个数组,一个数组算出从左往右求最大上升子序列
另外一个数组算出从右往左求最大上升子序列
然后俩个数组上的数相加就是队伍最大值+1,
用  N-队伍最大值 即为答案
#include<bits/stdc++.h>
using namespace std;
int a[1001];
int dp1[1001];
int dp2[1001];
int dp3[1001];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        dp1[i]=1;
        dp2[i]=0;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(a[i]>a[j])//最大上升子序列
                dp1[i]=max(dp1[i],dp1[j]+1);
        }
    }
      for(int i=n-1;i>=0;i--)
    {
        for(int j=n-1;j>i;j--)
        {
            if(a[i]>a[j])//最大上升子序列
                dp2[i]=max(dp2[i],dp2[j]+1);
        }
    }
    for(int i=0;i<n;i++)
    {
        dp3[i]=dp1[i]+dp2[i];
    }
    cout<<n-*max_element(dp3,dp3+n);
}

全部评论

相关推荐

在投简历的柠檬精很想...:可以明确说,问的东西几乎是简历上的东西。你写的确实有点模糊。面试可能会问你一些常用的通信的问题,差分信号走线之类的,单片机最小系统啥的,模电,数电,基本电源,buck,boost,ldo之类的吧。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务