前言

数据水的一批,\(\mathcal{O}(n^3)\) 给过我觉得是不应该的。

题意

有一个由 \(0\) 和 \(1\) 组成的序列 \(a_1,a_2,a_3,a_4....,a_n\) 。

规定可以选择一段区间取反。问取反后序列中最多有多少个 \(1\) 。

\(\sf Solution\)

\(\sf Step1\)

哇, \(n\) 只有 \(100\) ,可以暴力啦!

枚举区间左端点和右端点,然后 \(\mathcal{O}(n)\) 统计 \(1\) 的个数。

时间复杂度:\(\mathcal{O}(n^3)\)

\(\sf Step2\)

上面那种太无脑了,想想优化吧。

显然前缀和

先预处理 \(1\) 的个数,取反时只需要区间查询,把 \(1\) 的个数和 \(0\) 的个数互换。

时间复杂度:\(\mathcal{O}(n^2)\)

\(\sf Code\)

#include<cstdio>
using namespace std;
int n,a[105],x,y,maxx;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&x),a[i]=a[i-1]+x;//预处理
for(int i=1;i<=n;++i)
for(int j=i;j<=n;++j)
{
x=a[j]-a[i-1];//计算区间中1的个数
y=j-i+1-x;//计算区间中0的个数
if(a[n]-x+y>maxx)//a[n]-x+y为取反后1的个数
maxx=a[n]-x+y;//比较
}
printf("%d",maxx);
return 0;
}

最新文章

  1. linux常用命令-压缩解压命令
  2. XP机器上WCF采用X509证书加密时IIS读取证书的授权
  3. jquery图片时钟
  4. 如何使用Jquery自定义命名空间namespace
  5. IOS的浅拷贝和深拷贝
  6. C. Tourist's Notes
  7. _doPostBack用法总结
  8. for练习--侦察兵
  9. [译]Selenium Python文档:四、元素定位
  10. openfire极限优化
  11. servlet篇 之 访问形式
  12. .net core 2.0 Redis的基本使用
  13. 手动实现Promise
  14. Nginx可以做什么?看完这篇你就懂了
  15. 如何构建高性能MySQL索引
  16. hadoop命令帮助
  17. (三)java程序的编译和执行
  18. Vue Study [2]: Vue Router
  19. java动态数组笔记
  20. 【问题】:spring cloud sleuth日志组件冲突问题

热门文章

  1. Luogu3379 【模板】最近公共祖先(LCA) (倍增LCA)
  2. 解决使用 Eruda 绑定 dom 未在指定位置显示问题
  3. 【Java】学习路径58-TCP聊天-双向发送实现
  4. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式
  5. node前后端交互(Express)
  6. 简单的java代码审计
  7. KingbaseES sys_prewarm 扩展
  8. 面试突击82:SpringBoot 中如何操作事务?
  9. linux中通过date命令获取昨天或明天时间的方法
  10. 防火墙:iptable和firewalld常用操作