HDU 5783 Divide the Sequence(数列划分)

Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

 

Problem Description - 题目描述

Alice has a sequence A, She wants to split A into as much as possible continuous subsequences, satisfying that for each subsequence, every its prefix sum is not small than 0.

Alice有一个数列A,她想把A拆分出尽可能多的子串,并且每个子串的任意前缀和都大于0。

CN

Input - 输入
The input consists of multiple test cases.
Each test case begin with an integer n in a single line.
The next line contains n integers A1,A2⋯An.
1≤n≤1e6
−10000≤A[i]≤10000
You can assume that there is at least one solution.

多组测试用例。
每组测试用例的第一行为一个整数n。
下一行有n个整数A1,A2⋯An。
≤n≤1e6
−≤A[i]≤
你可以认为不存在无解的情况。

CN

Output - 输出

For each test case, output an integer indicates the maximum number of sequence division.
对于每组测试用例,输出此序列的最大划分数。

CN

Sample Input - 输入样例

6
1 2 3 4 5 6
4
1 2 -3 0
5
0 0 0 0 0

Sample Output - 输出样例

6
2
5

题解

  贪心,一开始看错题目了,一直想不出解法,浪费了巨多时间……
  某子串1 2 3的所有前缀为

1
1 2
1 2 3

  显然如果出现负数的话,需要前面的正数来凑,反正无法满足条件。
  做法就是从后往前扫描,记录临时的后n项和,>=0则清空,划分数+1。
  极限数据应该是5e5 * 10000 = 5e9,单纯的int会超,需要__int64。

代码 C++

 #include <cstdio>
__int64 data[];
int main(){
__int64 n, i, opt, tmp;
while (~scanf("%I64d", &n)){
for (i = opt = tmp = ; i < n; ++i) scanf("%I64d", data + i);
for (--i; ~i; --i){
tmp += data[i];
if (tmp >= ) tmp = , ++opt;
}
printf("%I64d\n", opt);
}
return ;
}

HDU 5783 Divide the Sequence(数列划分)的更多相关文章

  1. HDU 5783 Divide the Sequence (贪心)

    Divide the Sequence 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 Description Alice has a seq ...

  2. hdu 5783 Divide the Sequence 贪心

    Divide the Sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 Description Alice has a seq ...

  3. HDU 5783 Divide the Sequence

    Divide the Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  4. 【贪心】HDU 5783 Divide the Sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5783 题目大意: 把一个N个数的数列拆成若干段,保证每一段的前缀和都非负,求最多能拆成多少段. 题目 ...

  5. HDU 5783 Divide the Sequence (训练题002 B)

    Description Alice has a sequence A, She wants to split A into as much as possible continuous subsequ ...

  6. HDU 5063 Operation the Sequence(暴力)

    HDU 5063 Operation the Sequence 题目链接 把操作存下来.因为仅仅有50个操作,所以每次把操作逆回去执行一遍,就能求出在原来的数列中的位置.输出就可以 代码: #incl ...

  7. 2016 Multi-University Training Contest 5 Divide the Sequence

    Divide the Sequence 题意: 给你一个序列A,问你最多能够分成多少个连续子序列,使得每个子序列的所有前缀和均不小于0 题解: 这题是比赛时候的水题,但我比的时候也就做出这一题, = ...

  8. 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence

    // 判断相同区间(lazy) 多校8 HDU 5828 Rikka with Sequence // 题意:三种操作,1增加值,2开根,3求和 // 思路:这题与HDU 4027 和HDU 5634 ...

  9. hdu 4893 Wow! Such Sequence!(线段树)

    题目链接:hdu 4983 Wow! Such Sequence! 题目大意:就是三种操作 1 k d, 改动k的为值添加d 2 l r, 查询l到r的区间和 3 l r. 间l到r区间上的所以数变成 ...

随机推荐

  1. C# 常用结构

    几种常用类的基本结构如下: public Size( double width, double height ) public Point( double x, double y) public Ve ...

  2. html中select只读显示

    因为Select下拉框只支持disabled属性,不支持readOnly属性,而在提交时,disabled的控件,又是不提交值的.现提供以下几种解决方案: 1.在html中使用以下代码,在select ...

  3. maketrans translate

    1. makestrans()用法 语法: str.maketrans(intab, outtab]); Python maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的 ...

  4. DataTable使用技巧总结【转】

    一.DataTable简介 ()构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string tableName) 用指定的表名初始化DataTa ...

  5. C#中判断字符是否大写

    在C#中,通常判断一个字符是否为大写字母,有些人可能会第一时间想到用正则表达式,那除了正则表达式,是否还有其他方式呢? 答案是肯定的,先一睹为快,具体代码如下: using System; using ...

  6. vi基本命令

    http://www.cnblogs.com/younggun/p/3190820.html 要记得经常练习

  7. Eclipse设置自动换行

    Eclipse 使用系统内置的“ Text Editor ”做为文本编辑器,这个文本编辑器有一个问题,就是文本无法换行.这个问题在显示上给人们带来不少麻烦. 终于有人忍不住开发了一个扩展插件 Word ...

  8. delphi学习笔记1

    快捷键CTRL+ENTER 定位到单元文件 F6快速查找文件 uses语句和include 指令 C++程序员应该知道uses语句和include 指令是不同的.uses语句只是用于输入引用单元的预编 ...

  9. iOS,第三方库使用

    1.ASIHttpRequest网络请求库 2.MBProgressHUD指示层库 3.Toast+UIView提示库 4.SDWebImage图片缓存库 5.MGSwipeTableCell单元格侧 ...

  10. tcp protocol number

    在计算机网络OSI模型中,TCP端口完成第四层传输层所指定的功能.我们的电脑与网络连接的许多应用都是通过TCP端口实现的.本文与大家分享部分TCP端口的介绍. 21端口:21端口主要用于FTP(Fil ...