题解 | #合唱队#

合唱队

https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4

动态规划,借鉴大佬的思路。

#include <iostream>
#include<vector>
using namespace std;

int main() {
    int num=0;
    cin>>num;
    int temp;
    vector<int> mem;
    vector<int> dp1(num,0);
    vector<int> dp2(num,0);
    dp1[0]=1;
    dp2[0]=1;
    while(cin>>temp){
        mem.push_back(temp);
    }
    for(int right=0;right<num;right++){
        dp1[right]=1;
        for(int left=0;left<right;left++){
            if(mem[right]>mem[left]){
                dp1[right]=max(dp1[left]+1,dp1[right]);
            }
        }
    }
    for(int left=num-1;left+=0;left--){
        dp2[left]=1;
        for(int right=num-1;right>left;right--){
            if(mem[left]>mem[right]){
                dp2[left]=max(dp2[left],dp2[right]+1);
            }
        }
    }
    int max=0;
    for(int i=0;i<num;i++){
        max=std::max(max,dp1[i]+dp2[i]-1);
    }
    cout<<num-max;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

07-29 14:46
门头沟学院 Java
码农索隆:好了,我说句公道话,咱三都辛苦了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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