这道题如果没有一次重启系统的机会就相当于两个最长不下降子序列加在一起。

所以只需要改亿点点即可

把dp分为 dpleft 和 dpright

最长不下降子序列程序:最长上升子序列 II 时间复杂度(nlogn) - 王浩泽 - 博客园 (cnblogs.com)

#include<bits/stdc++.h>using namespace std;const int N=1e5;const int inf=1e9;int main(){    int a[N],dp[N],n;        cin>>n;    for(int i=1;i<=n;i++) scanf("%d",&a[i]);        int len=0;    for(int i=1;i<=n;i++)    {        int l=0,r=len+1;        while(l+1!=r)        {            int m=l+r>>1;            if(dp[m]<a[i])            {                l=m;            }            else            {                r=m;            }        }        dp[r]=a[i];        len=max(len,r);    }        cout<<len;    return 0;}

合在一起即可(还要注意亿点细节)

like

for(int x = 1; x <= n; x++){
ans = max(ans, dpleft[x] + dpright[x + 1]);
}

这里的dpleft[x]应该加上dpright[x+1] 如果用x 和 x 的话    x可能会被用两次。

dpleft 和 dpright  都应该初始化为1

在这里给大家推荐一个函数让后面原来倒着算的最长下降子序列 变成正着算的最长上升子序列。
reverse(a + 1, a + n + 1);

之后再拼拼凑凑变成前一段程序:

scanf("%d",&n);
for (int i = 1;i <= n;i++){
scanf("%d",&a[i]);
dpright[i] = dpleft[i] = 1;
}
reverse(a + 1, a + n + 1);
for (int i = 1;i <= n;i++){
for (int j = 1; j < i;j++){
if(a[i] >= a[j]){
dpleft[i] = max(dpleft[i],dpleft[j] +1);
}
}
} for (int i = 2;i <= n;i++){
dpleft[i] = max(dpleft[i - 1], dpleft[i]);
}
for(int i = n - 1; i >= 1; i--){
for(int j = n; j > i; j--){
if(a[i] <= a[j]){
dpright[i] = max(dpright[i], dpright[j] + 1);
}
}
}

最后再找亿下最大值塞入ans中最后输出即可:

for(int i = n - 1; i >= 1; i--){
dpright[i] = max(dpright[i], dpright[i + 1]);
}
int ans = 0;
for(int x = 1; x <= n; x++){
ans = max(ans, dpleft[x] + dpright[x + 1]);
}
printf("%d\n", ans);
return 0;

完整代码:

#include <bits/stdc++.h>
using namespace std; int dpleft[10005],dpright[10005], a[10005];
int n; int main(){
scanf("%d",&n);
for (int i = 1;i <= n;i++){
scanf("%d",&a[i]);
dpright[i] = dpleft[i] = 1;
}
reverse(a + 1, a + n + 1);
for (int i = 1;i <= n;i++){
for (int j = 1; j < i;j++){
if(a[i] >= a[j]){
dpleft[i] = max(dpleft[i],dpleft[j] +1);
}
}
} for (int i = 2;i <= n;i++){
dpleft[i] = max(dpleft[i - 1], dpleft[i]);
}
for(int i = n - 1; i >= 1; i--){
for(int j = n; j > i; j--){
if(a[i] <= a[j]){
dpright[i] = max(dpright[i], dpright[j] + 1);
}
}
}
for(int i = n - 1; i >= 1; i--){
dpright[i] = max(dpright[i], dpright[i + 1]);
}
int ans = 0;
for(int x = 1; x <= n; x++){
ans = max(ans, dpleft[x] + dpright[x + 1]);
}
printf("%d\n", ans);
return 0;
}

重启系统(等级考试4级 2021-03 T4)的更多相关文章

  1. Python全国二级等级考试(2019)

    一.前言 2018年9月随着全国计算机等级考试科目中加入“二级Python”,也确立了Python在国内的地位,猪哥相信Python语言势必会像PS那般普及.不久的将来,谁会Python谁就能获得女神 ...

  2. Python全国二级等级考试(2019)

    一.前言 2018年9月随着全国计算机等级考试科目中加入“二级Python”,也确立了Python在国内的地位,猪哥相信Python语言势必会像PS那般普及.不久的将来,谁会Python谁就能获得女神 ...

  3. Vmware扩展磁盘如何不需重启系统

    在虚拟机Vmware中我们有时候需要添加新的虚拟磁盘或给已有虚拟磁盘扩容(expand),在新增磁盘或磁盘扩容后,Linux系统并不能马上识别到.也就是说你看不到磁盘空间变化(使用fdisk -l查看 ...

  4. 烂泥:【解决】修改LVM卷组名重启系统后,无法进入进入系统

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 一台服务器系统已经安装完毕,但是LVM的卷组vg使用的是默认的VolGroup名称,使用起来感觉不舒服,打算把这个卷组名称修改为vg. 先来查看系统中有 ...

  5. Linux三种关机/重启系统的命令

    Linux提供了三种关机/重启系统的命令:shutdown.halt和reboot.这三个命令在一般情况下只有 系统的超级用户(一般是指root)才可以执行.输入没有参数的shutdown命令,两分钟 ...

  6. 全国计算机等级考试二级Python语言程序设计考试大纲

    全国计算机等级考试二级Python语言程序设计考试大纲(2018年版) 基本要求 掌握Python语言的基本语法规则. 掌握不少于2个基本的Python标准库. 掌握不少于2个Python第三方库,掌 ...

  7. 如何在CentOS 7中添加新磁盘而不用重启系统

    导读 对大多数系统管理员来说扩充 Linux 服务器的磁盘空间是日常的工作之一.因此这篇文章会通过使用 Linux 命令,在 CentOS 7 系统上演示一些简单的操作步骤来扩充您的磁盘空间而不需要重 ...

  8. ubuntu16.04给普通用戸提成root权限,会出现造成重启系统,没有登录用户

    一.导致问题的原因 直接修改配置文件提权,会造成重启系统后没有原来的登录用户 vim /etc/passwd nulige:x:0:0:nulige,,,:/home/gree:/bin/bash 解 ...

  9. iptables 重启系统生效

    1. 重启系统生效 开启: chkconfig iptables on 关闭: chkconfig iptables off   2. 即时生效,重启后失效 开启: service iptables ...

  10. Centos7 fstab盘符挂载硬盘导致重启系统失败解决办法

    服务器拥有多个硬盘插槽,在进行维护或重启时,这些硬盘的相对位置可能发生变化.利用盘符(dev/vda)方式挂载磁盘,可能由于磁盘顺序变化导致重启时读取fstab文件发生错误,从而无法正常重启服务器. ...

随机推荐

  1. 【题解】CF45I TCMCF+++

    题面传送门 题目描述 有 \(n\) 个数 \(a_i\) 请你从中至少选出一个数,使它们的乘积最大 解决思路 对于正数,对答案一定有贡献(正数越乘越大),所以输入正数时直接输出即可. 对于负数,如果 ...

  2. centos ssh 连接缓慢

    在连接apache,ssh,mysql等服务器时,如果出现连接过慢,可能的原因是dns 的反向查询.反向解析是防止假冒的IP连接服务器,把IP解析成域名,来提高安全性,看这个IP是否是伪造,这是dns ...

  3. Windows之应用安装程序 —— winget

    大家都用过Linux中的应用程序安装工具,如yum.apt.rpm等工具进行安装自己想要的一些工具或则软件之类的,当然Linux操作系统还是很强大的有很多类似的命令来安装我们所需要的程序,但是wind ...

  4. ubuntu 22.04安装多个gcc

    sudo apt install gcc-9 g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 - ...

  5. 推荐一款 .NET 编写的 嵌入式平台的开源仿真器--Renode

    Renode 是一个开发框架,通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发. Renode 可以模拟 Cortex-M.RISC-V 等微控制器,不仅可以模拟 CPU指令,还可以模拟外设,甚至 ...

  6. variant conversion error for variable:v8

    oracle 添加表数据报错:variant conversion error for variable:v8. 是数据类型不匹配.

  7. ArcObjects SDK开发 006 ICommand和ITool接口

    1.ICommand接口 ICommand接口是插件协议之一,继承该接口的类都可以成为命令.即点击一下执行,不主动与宿主发生鼠标和键盘交互.该接口包含的重要成员如下表所示. 序号 名称 类型 描述 1 ...

  8. Linux下用rm误删除文件的三种恢复方法

    Linux下用rm误删除文件的三种恢复方法 对于rm,很多人都有惨痛的教训.我也遇到一次,一下午写的程序就被rm掉了,幸好只是一个文件,第二天很快又重新写了一遍.但是很多人可能就不像我这么幸运了.本文 ...

  9. MySQL5.7兼容5.6

    MySQL5.7兼容5.6配置----MySQL5.7以上版本数据库兼容MySQL5.5-5.6版本数据库 手动安装MySQL 8.0/5.7 需要修改配置兼容 ,修改后需要重启mysql服务 (建议 ...

  10. 如何在路由绑定中使用 IParsable

    IParsable 是 .Net 7 中新增的接口,它可以将字符串转换为对应的实体.在 Controller 的 Route 绑定中可以使用 IParsable 来绑定复杂的实体. 实验背景 假设有一 ...