GT and sequence

 Accepts: 95
 Submissions: 1467
 Time Limit: 2000/1000 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
给出NN个整数。你要选择至少一个数,使得你选的数的乘积最大。
保证任意选一些数相乘的绝对值都不会大于2^{63}-12​63​​−1。
输入描述
第一行读入一个数TT表示数据组数。
对于每组数据:
第一行是一个数NN,第二行是NN个整数。 1 \leq T \leq 10001≤T≤1000
1 \leq N \leq 621≤N≤62 hack时建议输出最后一行的行末回车;每一行的结尾不要输出空格。
输出描述
对于每组数据,输出一个数表示最大的乘积。
输入样例
1
3
1 2 3
输出样例
6

比的时候本来打算写一个刚学的深搜,结果最后TLE了。。。。

TLE代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; int test;
long long n, a[70], ans, flag; void dfs(long long i, long long mul)
{
if (i == n + 1)
{
if (flag == 0 && mul == 1)
{
flag = 1;
}
else
{
ans = max(ans, mul);
}
return;
}
dfs(i + 1, mul);
dfs(i + 1, mul*a[i]);
} int main()
{
//freopen("i.txt", "r", stdin);
//freopen("o.txt", "w", stdout); int i;
scanf("%d", &test); while (test--)
{
flag = 0;
scanf("%I64d", &n); i = 1;
for (i = 1; i <= n; i++)
scanf("%I64d", &a[i]);
sort(a + 1, a + n + 1); ans = a[n];
dfs(1, 1); cout << ans << endl;
} //system("pause");
return 0;
}

最后规规矩矩考虑各种情况,很麻烦的一道题。。。。负数是奇数个的时候不要最大的那个。。。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <ctime>
#pragma warning(disable:4996)
using namespace std; long long po[900], ne[900];
long long n, num_ne, num_po; bool cmp(long long x, long long y)
{
return x > y;
} int main()
{ long long test, flag0, i, x, ans;
scanf("%I64d", &test); while (test--)
{
num_ne = 0;
num_po = 0;
flag0 = 0;
memset(po, 0, sizeof(po));
memset(ne, 0, sizeof(ne)); scanf("%I64d", &n); for (i = 1; i <= n; i++)
{
scanf("%I64d", &x);
if (x > 0)
{
po[num_po++] = x;
}
else if (x < 0)
{
ne[num_ne++] = x;
}
else
{
flag0 = 1;
}
}
sort(po, po + num_po);
sort(ne, ne + num_ne,cmp); if (flag0)
{
if (num_po > 0)
{
ans = 1;
for (i = 0; i < num_po; i++)
{
ans = ans*po[i];
}
if (num_ne % 2)
{
for (i = 1; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
else
{
for (i = 0; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
}
else
{
//没有正数的情况
if (num_ne == 0)
{
ans = 0;
}
else if (num_ne == 1)
{
ans = 0;
}
else
{
ans = 1;
if (num_ne % 2)
{
for (i = 1; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
else
{
for (i = 0; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
}
}
}
else
{
if (num_po > 0)
{
ans = 1;
for (i = 0; i < num_po; i++)
{
ans = ans*po[i];
}
if (num_ne % 2)
{
for (i = 1; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
else
{
for (i = 0; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
}
else
{
//没有正数的情况
if (num_ne == 0)
{
ans = 0;
}
else if (num_ne == 1)
{
ans = ne[0];
}
else
{
ans = 1;
if (num_ne % 2)
{
for (i = 1; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
else
{
for (i = 0; i < num_ne; i++)
{
ans = ans*ne[i];
}
}
}
}
} cout << ans << endl;
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU 5504:GT and sequence的更多相关文章

  1. java中正则表达式,编译报错:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

    转自:https://www.cnblogs.com/EasonJim/p/6561666.html 若出现:Invalid escape sequence (valid ones are  \b   ...

  2. CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法

    CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...

  3. HDU - 6409:没有兄弟的舞会(数学+思维)

    链接:HDU - 6409:没有兄弟的舞会 题意: 题解: 求出最大的 l[i] 的最大值 L 和 r[i] 的最大值 R,那么 h 一定在 [L, R] 中.枚举每一个最大值,那么每一个区间的对于答 ...

  4. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  5. JPA连接Mysql数据库时提示:Table 'jpa.sequence' dosen't exisit

    场景 在使用JPA连接Mysql数据库进行数据持久化时提示: Table 'jpa.sequence' dosen't exist 注: 博客主页: https://blog.csdn.net/bad ...

  6. hdu 5504 GT and sequence

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5504 GT and sequence Time Limit: 2000/1000 MS (Java/O ...

  7. HDU 5504 GT and sequence 模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5504 思路:模拟 代码: #include<stdio.h>//------杭电5504 ...

  8. HDU 5950:Recursive sequence(矩阵快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:给出 a,b,n,递推出 f(n) = f(n-1) + f(n-2) * 2 + n ^ 4. f ...

  9. HDU 2062:Subset sequence(思维)

    Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

随机推荐

  1. IDEA设置窗口标签换行显示

    windows -> editor tabs -> tabs placement 关掉 show tabs in sigle row即可

  2. JS实现复制信息到剪贴板

    copy 当用户通过浏览器UI启动复制操作并响应允许的document.execCommand('copy')调用时触发copy事件. copy事件可作用于任何可被选中或可编辑的元素,如body.di ...

  3. mysql判断数据库或表是否存在

    (1) 判断数据库存在, 则删除:       drop database if exists db_name;(2) 判断数据表存在, 则删除: drop table if exists table ...

  4. 《React后台管理系统实战 零》:基础笔记

    day01 1. 项目开发准备 1). 描述项目 2). 技术选型 3). API接口/接口文档/测试接口 2. 启动项目开发 1). 使用react脚手架创建项目 2). 开发环境运行: npm s ...

  5. Python学习第三课——运算符

    # 运算符 + - * / **(幂) %(取余) //(取整) num=9%2 print("余数为"+(str)(num)) #运算结果为 1 num1=9//2 print( ...

  6. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

  7. mysql数据库的索引类型

      MySQL索引类型: 1.普通索引 最基本的索引,它没有任何限制,用于加速查询. 创建方法: a. 建表的时候一起创建 CREATE TABLE mytable ( name VARCHAR(32 ...

  8. IDEA中如何部署tomcat

    1.添加tomcat 2.添加tomcat所依赖的war包 test009.war包刚开始可能不存在,这个时候需要将maven项目进行打包,然后点击“+”之后就会出现一个和项目名同名的war包,选中就 ...

  9. PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法

    实现的功能为:当点击菜单中某个菜单时,会弹出一个新窗口,下面就列出部分代码 def mail_setting(self): log.debug("open mail settings&quo ...

  10. WDSL文件中的XML元素

    WDSL文件中的XML元素 理解起来其实很简单Types指定类型,当然是在后面的Message中需要的类型Message可以理解为函数中的参数,只不过如果一个函数如果有多个参数的时候应该吧这些参数定义 ...