当前位置: 首页 > news >正文

14 收心赛3 T1 最长不降子序列 题解

最长不降子序列

题面

小 W 有一个长度为 \(n\) 的序列 \(a_1, a_2 ...a_n\) ,且 \(a_i\) 的取值都为 1 或 2

现在,你可以任意选择该序列的一个区间进行翻转操作,但你只能翻转一次。

小 W 希望执行操作之后,整个序列的最长不下降子序列长度最大。请你求出这个最大值。

\(1 \le n \le 10^6\)

题解

这道题正解比较简单,考场上没有想到比较巧妙的思路,只能暴力dp,分数还好是拿到了,但是两个小时也过去了

暴力dp的思路就不说了,赛后看了看发现好像有点问题

假如我们不能翻转,那么最长不降子序列答案应该形如 \(111 ... 222 ...\)

如果能够翻转一次,那么答案应该形如 \(111 ... 222 ... 111 ... 222 ...\)

只要翻转中间的 $222 ... 111 ... $ 这一段即可转化为一个最长不降子序列

所以我们可以考虑每个点在哪一段,然后分别转移

\(f(i,1/2/3/4)\) 表示到第 \(i\) 个点,且第 \(i\) 个点在 \(1/2/3/4\) 段的最长不降子序列长度

转移

  • \(f(i,1) = f(i - 1, 1) + [a_i =1]\)
  • \(f(i,2) = max\{ f(i - 1, 2) ,f(i - 1, 1) \} + [a_i = 2]\)
  • \(f(i,3) = max\{f(i - 1, 3), f(i - 1, 2) \} + [a_i = 1]\)
  • \(f(i,4) = max \{f(i - 1, 4) , f(i - 1, 3)\} + [a_i = 2]\)

code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>using namespace std;const int N = 1e6 + 10;int a[N], n;
int f[N][5];int main () {// freopen ("sequence.in", "r", stdin);// freopen ("sequence.out", "w", stdout);cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = 1; i <= n; i++) {for (int j = 1; j <= 4; j++) {f[i][j] = max (f[i - 1][j - 1], f[i - 1][j]) + ((a[i] & 1) == (j & 1));}}cout << max ({f[n][1], f[n][2], f[n][3], f[n][4]}) << endl;return 0;
}
http://www.sczhlp.com/news/167014/

相关文章:

  • 16 LCA模拟赛1T1 密码 题解
  • 响应式网站设计图怎么做百度快照下载
  • 旅游业网站开发建设网站建立平台 cms
  • 深圳方维网站建设公司山东网站备案注销
  • 仿站网站域名软件项目管理的主要内容有哪些?
  • 学术会议网站怎么做wordpress mysql口令
  • 上海跨境电商网站开发公司排名蜜芽tv跳转接口点击进入网页
  • dz论坛网站后台设置seo网站点击量排名优化
  • 如何制作网站建设商务网站开发步骤
  • 连云港网站建设多少钱秦皇岛做网站哪家好
  • 培训机构网站建设要求电商网站设计图
  • 建设个人网站赚钱wordpress 免费中文模板下载
  • 整合营销的四个层次郑州网站优化渠道
  • 网站信息优化的方式企业网络营销
  • 上海网站建设天锐科技建筑工程网络计划图绘制软件
  • 完整的app网站开发亚马逊商标备案是否必须做网站
  • 招人制作网站移动互联网应用开发
  • 网站 动态澄迈网站新闻建设房子
  • 建设一个公司网站 需要钱吗编程网站网址
  • 免费网站app哪个好申请域名建立网站
  • 石景山网站建设有哪些公司上线了做网站价格贵
  • 网站设计平台 动易教怎么做ppt的网站
  • 程序员接活的平台网站线上购买链接
  • VScode C/C++ 汉化 竞赛版 只需下载扩展 (超简单)
  • 网络安全工具与社区讨论月报
  • 机器人运动未来与人机交互研究
  • 欧拉路径 欧拉图 小记
  • OI 笑传 #16
  • 东莞网站搭建哪里好怎么样做国际网站生意
  • 京东网上商城官网下载外贸推广优化公司