#include<stdio.h>
int A[10001];/*使用动态规划法,开辟数组空间存放每处理完一个B后各种数p划分下的非零段个数,根据题意,p不超过10000*/
int flag[10001];/*flag用于记录非零段是否连续,全局变量初始时默认为零,所以省去了赋初值的步骤*/
int main(){int n;scanf("%d",&n);int B,num=0,p=0,now=0;/*now记录当前遇到的被处理数B的最大值*/for(int i=0;i<n;i++){scanf("%d",&B);if(B>now){now=B;}while(p<=now){/*p记录当前划分使用的数*/ if(B>=p&&p!=0){/*如果被处理数B>=p*/if(flag[p]==0){/*且flag为零,即不连续,记录非零段个数的A[p]就要加一*/ A[p]++;}flag[p]=1;}else{flag[p]=0;}p++;}p=0;}for(int i=0;i<=now;i++){if(A[num]<A[i]){/*找到所有可能划分数的非零段个数的最大值*/num=i;} }printf("%d",A[num]);return 0;
}

题目描述

A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组。我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足:

  • 1≤i≤j≤n;
  • 对于任意的整数 k,若 i≤k≤j,则 Ak>0;
  • i=1 或 Ai−1=0;
  • j=n 或 Aj+1=0。

下面展示了几个简单的例子:

  • A=[3,1,2,0,0,2,0,4,5,0,2] 中的 4 个非零段依次为 [3,1,2]、[2]、[4,5] 和 [2];
  • A=[2,3,1,4,5] 仅有 1 个非零段;
  • A=[0,0,0] 则不含非零段(即非零段个数为 0)。

现在我们可以对数组 A 进行如下操作:任选一个正整数 p,然后将 A 中所有小于 p 的数都变为 0。试选取一个合适的 p,使得数组 A 中的非零段个数达到最大。若输入的 A 所含非零段数已达最大值,可取 p=1,即不对 A 做任何修改。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 n。

输入的第二行包含 n 个用空格分隔的自然数 A1,A2,⋯,An。

输出格式

输出到标准输出。

仅输出一个整数,表示对数组 A 进行操作后,其非零段个数能达到的最大值。

样例1输入

11
3 1 2 0 0 2 0 4 5 0 2

Data

样例1输出

5

Data

样例1解释

p=2 时,A=[3,0,2,0,0,2,0,4,5,0,2],5 个非零段依次为 [3]、[2]、[2]、[4,5] 和 [2];此时非零段个数达到最大。

样例2输入

14
5 1 20 10 10 10 10 15 10 20 1 5 10 15

Data

样例2输出

4

Data

样例2解释

p=12 时,A=[0,0,20,0,0,0,0,15,0,20,0,0,0,15],4 个非零段依次为 [20]、[15]、[20] 和 [15];此时非零段个数达到最大。

样例3输入

3
1 0 0

Data

样例3输出

1

Data

样例3解释

p=1 时,A=[1,0,0],此时仅有 1 个非零段 [1],非零段个数达到最大。

样例4输入

3
0 0 0

Data

样例4输出

0

Data

样例4解释

无论 p 取何值,A 都不含有非零段,故非零段个数至多为 0。

子任务

70% 的测试数据满足 n≤1000;

全部的测试数据满足 n≤5×105,且数组 A 中的每一个数均不超过 104。

CCF 202109-2 非零段划分(动态规划法,过了70%)相关推荐

  1. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版

    CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版 一.题目: 二.Java70分答案 import java.util.ArrayList; import java.uti ...

  2. csp真题 202109-2非零段划分C++代码(100分)

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 样例1输入 11 3 1 2 0 0 2 0 4 5 0 2 样例1输出 5 样例1解释 p=2 ...

  3. CCF202109-2 非零段划分

    主要用到差分法 借用岛屿情况来分析这个题.考虑p足够大的情况,所有的数都被海水淹没了,只有0个岛屿.然后,海平面逐渐下降,岛屿数量出现变化.每当一个凸峰出现,岛屿数就会多一个:每当一个凹谷出现,原本相 ...

  4. CCF202109-2 非零段划分(100分)【序列处理】

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...

  5. 非零段划分(CSP202109-2)

    非零段划分 题目链接 题目描述: 输入格式: 输出格式: 样例1: 输入: 11 3 1 2 0 0 2 0 4 5 0 2 输出: 5 样例2: 输入: 14 5 1 20 10 10 10 10 ...

  6. CSP 202109-2 非零段划分

    题目链接:非零段划分 题目描述 A1,A2,⋯,An 是一个由 n 个自然数(非负整数)组成的数组.我们称其中 Ai,⋯,Aj 是一个非零段,当且仅当以下条件同时满足: 1≤i≤j≤n: 对于任意的整 ...

  7. 非零基础自学计算机操作系统 第1章 操作系统概述 习题一

    非零基础自学计算机操作系统 第1章 操作系统概述 习题一 [1]什么是操作系统?操作系统有哪些特性? 答:操作系统是管理计算机硬件与软件资源的计算机程序,它的主要特性有并发性.易用性.稳定性和异步性. ...

  8. 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统

    非零基础自学计算机操作系统 文章目录 非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.1 多道批处理操作系统 1.4.2 分时操作系统 第1章 操作系统概述 1.4 ...

  9. Keil MDK下如何设置非零初始化变量(转)

    源:Keil MDK下如何设置非零初始化变量 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备.而keil mdk在默 ...

  10. 网络故障解决方案之非标准子网划分【网管员必懂】

    网络故障解决方案之非标准子网划分 一个组织申请了一段IP地址后,可能需要对IP地址进行进一步的子网划分.例如,某规模较大的公司申请了一个B类IP地址166.133.0.0.如果采用标准子网掩码255. ...

最新文章

  1. 双十一报名截止,决赛在即!AI Challenger2018极客峰会免费抢票!
  2. React学习笔记5:React Hooks概述
  3. mysql数据库优化(二)
  4. 皮一皮:21世纪了还有这样的事情?
  5. boost::mp11::mp_set_difference相关用法的测试程序
  6. login窗口for mysql_CTF| SQL注入之login界面
  7. c语言宿舍管理设计报告,C语言课程设计—学生宿舍管理系统设计报告.doc
  8. Redis集群搭建~Redis-x64-3.2.100版本
  9. meta 标签的详细使用
  10. 看电影(movie):组合数
  11. 给chrome手动安装github上插件
  12. 服务器系统如何清理,服务器清理内存怎么清理
  13. 自习室 《大学生创新创业课程设计》
  14. 禁用Win10截屏快捷键Win+Shift+S,改用Snipaste
  15. MySQL 数据库基础
  16. DDCTF-2019-writeup(7web+5misc)
  17. Visa领导女性赋权新的十年
  18. 计算机音乐数字乐谱桃源恋歌,桃源恋歌钢琴简谱-数字双手-Miume・MARiA・217
  19. 气象强迫数据(fort.22)
  20. 华为在芯片领域又一个重磅炸弹,鲲鹏920杀出

热门文章

  1. ue4-材质编辑器material
  2. jordan标准 相似_矩阵的Jordan标准形及其相似变换矩阵.pdf
  3. 使用fiddler代理,手机无法上网
  4. c语言判断字符串str1中含有字符串str2(是否为子串问题)
  5. EditPlus常用技巧
  6. 第四章——权限提升分析及防御
  7. 最新可用今日头条视频解析(简单分析+易语言实现)
  8. 途家2020校招算法笔试题——寻找最大数——背包问题
  9. python使用pip
  10. 洛谷P1512伊甸园的日历游戏题解