hdu4561 连续最大积
题意:
连续最大积
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 1354 Accepted Submission(s): 458
Problem Description
小明和他的好朋友小西在玩一个游戏,由电脑随机生成一个由-2,0,2三个数组成的数组,并且约定,谁先算出这个数组中某一段连续元素的积的最大值,就算谁赢!
比如我们有如下随机数组:
2 2 0 -2 0 2 2 -2 -2 0
在这个数组的众多连续子序列中,2 2 -2 -2这个连续子序列的积为最大。
现在小明请你帮忙算出这个最大值。
Input
第一行输入一个正整数T,表示总共有T组数据(T <= 200)。
接下来的T组数据,每组数据第一行输入N,表示数组的元素总个数(1<= N <= 10000)。
再接下来输入N个由0,-2,2组成的元素,元素之间用空格分开。
Output
对于每组数据,先输出Case数。
如果最终的答案小于等于0,直接输出0
否则若答案是2^x ,输出x即可。
每组数据占一行,具体输出格式参见样例。
Sample Input
2
2
-2 0
10
2 2 0 -2 0 2 2 -2 -2 0
Sample Output
Case #1: 0
Case #2: 4
思路:
和最大连续子序列差不多,当0的时候置为0,要注意的事还有开个东西,记录当前有多少个负数,更新的时候只有偶数的时候在更新,就这样,果断敲完,果断wa了,哎! 其实没考虑到这个问题,-2 2 2 2 2 2 我们在倒着跑一便就能排除这种情况了,因为毕竟只有奇偶两种情况...还有一点就是,如果最小的是-2那么只哟一种情况 就是只哟一个数字 并且这个数字是-2,自己稍微想下就明白,不解释...
#include<stdio.h> #define N (10000 + 500)
int num[N]; int main ()
{
int t ,n ,i ,ans_max ,cas = 1;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
int mk0 = 0;
for(i = 1 ;i <= n ;i ++)
{
scanf("%d" ,&num[i]);
if(num[i]) mk0 = 1;
}
printf("Case #%d: " ,cas ++);
if(!mk0 || n == 1 && num[1] == -2)
{
printf("0\n");
continue;
}
ans_max = 0;
int now = 0;
int ss = 0;
for(i = 1 ;i <= n ;i ++)
{
if(!num[i])
{
ss = now = 0;
continue;
}
if(num[i] < 0) ss ++;
now ++;
if(ss % 2 == 0 && ans_max < now)
ans_max = now;
}
now = 0;
ss = 0;
for(i = n ;i >= 1;i --)
{
if(!num[i])
{
ss = now = 0;
continue;
}
if(num[i] < 0) ss ++;
now ++;
if(ss % 2 == 0 && ans_max < now)
ans_max = now;
}
printf("%d\n" ,ans_max);
}
return 0;
}
hdu4561 连续最大积的更多相关文章
- hdu-4561 连续最大积( 水题)
http://acm.hdu.edu.cn/showproblem.php?pid=4561 求连续最大积. 他妈的狗逼思路到底咋说..... 思路是 %&*()*(&--))*)*& ...
- 求连续最大子序列积 - leetcode. 152 Maximum Product Subarray
题目链接:Maximum Product Subarray solutions同步在github 题目很简单,给一个数组,求一个连续的子数组,使得数组元素之积最大.这是求连续最大子序列和的加强版,我们 ...
- Java for LeetCode 152 Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- hdu 4561 模拟小题
连续最大积 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Subm ...
- Leetcode 记录(101~200)
Now, I want to just use English to explain the problem, it's about two month before the interview, s ...
- 【动态规划】Part1
1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析: dp [0] = 0 dp [1] = 1 + ...
- LeetCode practice
子集和问题:给定一组数和一个值,从这组数中选出若干个数使其和为给定的值.这是个NPC问题. 1.https://leetcode.com/problems/counting-bits/#/soluti ...
- Algo: maxSubArray vs. maxProduct
这两个问题类似,都可利用动态规划思想求解. 一.最大连续子序列和 https://leetcode.com/problems/maximum-subarray/description/ https:/ ...
- X000011
P1890 gcd区间 \(\gcd\) 是满足结合律的,所以考虑用 ST 表解决 时间复杂度 \(O((n\log n+m)\log a_i)\) 考虑到 \(n\) 很小,你也可以直接算出所有的区 ...
随机推荐
- js和c#小数四舍五入
<script language="javascript"> document.write("<h1>JS保留两位小数例子</h1>& ...
- Java 常见对象 01
常见对象·Object类 Object类的概述 * A:Object 类概述 * 类层次结构的根类 * 所有类都直接或间接地继承自该类 * B:构造方法 * public Object() * 回想为 ...
- 死磕Spring之IoC篇 - Spring 应用上下文 ApplicationContext
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- WPF 基础 - 图片与 base64
1. base64 转图片 将 base64 转成 byte[] 将 byte[] 作为内存流保存到一个 BitmapImage 实例的流的源 把 BitmapImage 作为目标图片的 Source ...
- Java内存区域略解
概览 分述 程序计数器 用于记录该线程的执行位置,便于跳转或者线程中断后的恢复 方法区 Java虚拟机规范中把 原本用于存储常量,静态变量和类的元信息,但java1.7将字符串常量移到了堆中,java ...
- 设计模式之建造者模式(BuilderPattern)
一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦.采用 ...
- 1.认识numpy的数组
认识ndarray --ndarray:用于存储单一数据类型的多维数组 ndarray基础属性的认识 import numpy as np #将numpy简写为np方便调用 1.通过以下实例来认识ar ...
- 微信小程序Animation动画的使用
目录 1,前言 2,属性 3,使用 1,前言 和css3动画不同,小程序中动画是主要是通过js控制的,简单来说就是创建一个动画实例animation.调用实例的方法来定义动画效果.最后通过动画实例的e ...
- Java进阶专题(二十六) 将近2万字的Dubbo原理解析,彻底搞懂dubbo
前言 前面我们研究了RPC的原理,市面上有很多基于RPC思想实现的框架,比如有Dubbo.今天就从Dubbo的SPI机制.服务注册与发现源码及网络通信过程去深入剖析下Dubbo. Dubbo架构 ...
- MySQL中explain语句的使用
一.概述 在 MySQL 中,我们可以使用慢查询日志或者 show processlist 命令等方式定位到执行耗时较长的 SQL 语句,在这之后我们可以通过 EXPLAIN或者 DESC 命令获取 ...