I题解--“歌尔创客杯”第二届哈尔滨理工大学(荣成)程序设计竞赛

完美主义者

https://ac.nowcoder.com/acm/contest/6119/I

I 完美主义者
dp,最长子序列的衍生。
可参考经典题拦截导弹,那个是最长递增子序列。

代码:

#include <bits/stdc++.h>
using namespace std;
int inc1[200],inc2[200],a[200];
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int ans=0,i,j;
        for(i = 0; i < n; i++)scanf("%d",&a[i]);
        //inc1[i]是存储以i为最高点时左边的递增子序列长度
        inc1[0]=1;
        for(i = 1; i < n; i++){
            inc1[i] = 1;
            for(j = 0; j < i; j++)
                if(a[i] > a[j] && inc1[j] + 1 > inc1[i])
                    inc1[i] = inc1[j]+1;
        }
        //inc2[i]是存储以i为最高点时左边的递减子序列长度
        inc2[n - 1] = 1;
        for(i = n - 2; i >= 0; i--){
            inc2[i] = 1;
            for(j = n - 1; j > i; j--)
                if(a[j] < a[i] && inc2[j] + 1 > inc2[i])
                    inc2[i] = inc2[j] + 1;
        }
        for(i = 0; i<=n; i++)
            if(inc1[i] + inc2[i]-1 > ans) 
                ans = inc1[i] + inc2[i] - 1;//总长度为左右长度相加-1,因为多算了自己一次。
        printf("%d\n",n-ans);
    }
    return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
05-27 14:57
西北大学 golang
强大的社畜在走神:27届真不用急,可以搞点项目、竞赛再沉淀沉淀,我大二的时候还在天天打游戏呢
投递华为等公司10个岗位
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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