首页 > 其他分享 >1239. 乘积最大

1239. 乘积最大

时间:2023-03-08 13:45:35浏览次数:54  
标签:乘积 最大 int res LL 1239 long include MOD

https://www.acwing.com/problem/content/description/1241/
1e5的数据量,显然不能暴搜,但是我还是要暴搜

显然寄了,只能过一半数据,这题的正确做法应该分情况讨论

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 1e5+10;
const long long MOD = 1000000009;
int a[N],k,n;
bool used[N];
long long res=-90000000000;
void dfs(int step,long long temp,int start)
{
    if(step+n-start<k)return;
    if(step==k+1)
    {
        cout << step << ' ' << temp << endl;
        res = max(temp,res);
        return;
    }
    for(int i=start;i<=n;i++)
    {
        dfs(step+1,temp*a[i],i+1);
    }
}




int main()
{
    cin >> n >> k;
    for(int i=1;i<=n;i++)cin >> a[i];
    dfs(1,1,1);
    cout << res%MOD << endl;
    return 0;
}

引用一下别人的题解

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

typedef long long LL;
const int N = 1e5+10;
const int MOD = 1000000009;
LL a[N];
int n,k;
LL res=1;

int main()
{
    cin >> n >> k;
    for(int i=1;i<=n;i++)cin >> a[i];
    sort(a+1,a+n+1);
    int l = 1 , r = n;//左右指针
    int sign=1;//符号
    if(k%2) //选奇数个
    {
        res = a[r];
        r--;
        k--;
        if(res < 0)sign = -1; // a1~an全为负数
    }
    while(k)
    {
        LL x = (LL)a[l]*a[l+1], y = (LL)a[r]*a[r-1];
        if(x * sign > y* sign)
        {
            res = x  % MOD * res % MOD; //只能是x %MOD * res % MOD,改变顺序会爆longlong
            l+=2;
        }
        else
        {
            res = y % MOD *  res % MOD;
            r-=2;
        }
        k-=2;
    }
    cout << res <<endl;
    
    return 0;
}

 

标签:乘积,最大,int,res,LL,1239,long,include,MOD
From: https://www.cnblogs.com/lxl-233/p/17179531.html

相关文章

  • 华为OD机试,最大排列
    ......
  • 分布式事务-最大努力通知 20230307
              ......
  • ping包最大1472
    icmp:MTU默认值为1500,一般指IP报文长度为1500B;由于IP头默认20B,所以ICMP报文为1480BICMP报文头为8B,所以ICMP载荷为1472B,对应ping命令的-s参数大小正在Ping47.107.241.69......
  • php的pcre使用的NFA引擎可利用pcre.backtrack_limit(最大回溯次数)返回false绕过
    看P神的文章,学习web安全知识的前沿技术栈和各种tricks,这真是一个充满乐趣的过程。这是codebreaking上的第二题:pcrewaf首先先回顾一下php文件上传的相关代码:前端form表......
  • 连续子数组的最大和【剑指Offer】
    连续子数组的最大和输入一个非空整型数组,数组里的数可能为正,也可能为负。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为......
  • 返回一个整数数组中最大子数组的和
    1.题目:返回一个整数数组中最大数组的和2.要求:(1)输入一个整数数组,数组里有正数也有负数。(2)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和......
  • 课堂练习:最大子数组
    参考了一篇学长的博客,受益匪浅,通过不断累加,当和变成负数归零从一个数开始加,之前的结果保存到max,每一次的结果都跟max对比,保证只要不低于0的负数都可以加进来1pu......
  • 求数组中的最大子数组的和--相关测试
    测试一:在普通的数组里面求最大子数组的和首先给出一个普通数组的定义,然后循环遍历,为数组的n个元素赋值;然后再根据a[i]+a[i-1]>a[i]的条件是否成立,来进行加和运算,然后赋值......
  • 1599. 经营摩天轮的最大利润 (Medium)
    问题描述1599.经营摩天轮的最大利润(Medium)你正在经营一座摩天轮,该摩天轮共有4个座舱,每个座舱最多可以容纳4位游客。你可以逆时针轮转座舱,但每次轮转都需要......
  • 求一个数组中所有子数组和的最大值
    importdao.StuMapper;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlAppl......