Given an array of n elements.Find the maximum sum when the array elements will be arranged in such way. Multiply the elements of each pair and add to get maximum Sum. Sum could be larger so take mod with 10^9+7.

Example1:
Input:  n=
        -,,,,-,-,
Output:
So to ,-},{-,},{,} and {}.So the answer *(-))+((-)*)+(*)+() ={}.

Example2:
Input:  n=
        -,,
Output:
So to ,} and {}.So the answer )*)+()={}.

Input:
The first line consists of an integer T i.e number of test cases. The first line of each test case consists of an integer n.The next line consists of n spaced integers(positive or negative).

Output:
Print the maximum sum % 10^9+7.

Constraints: 
1<=T<=100
1<=n,a[i]<=10000

Example:
Input:
2
3
8 7 9
6
-1 9 4 5 -4 7

Output:
79
87

下面是我的代码实现:

主要思路:(假设0是负数)

先对于输入的数组进行排序。排序按照从小到大的顺序。

如果数组个数是偶数个,那么直接按照顺序两两相乘然后相加即可得到最大和。

如果数组个数是奇数,需要考虑正数负数的个数,其中负数为偶数个,正数是奇数个(例如:-7  -4  -1  0  4  5  9)只需要将负数依次两两相乘,忽略第一个正数,其余正数依次两两相乘再求和即可得到最大和。如果负数的个数是奇数个,正数是偶数个(例如:-7  -4  -1  4  5  9  10)只需要跳过最后一个负数,其余依次相乘然后相加即可得到最大和。

具体代码实现如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num,i;
    scanf("%d",&num);
    int *result=(int *)malloc(sizeof(int)*num);
    ;i<num;i++)
    {
        int N,j,k,temp;
        ;
        scanf("%d",&N);
        int *Arr=(int *)malloc(sizeof(int)*N);
        ;j<N;j++)
            scanf("%d",&Arr[j]);
        //首先是对于数组元素进行排序。这里随便用一个冒泡排序。
        ;j<N;j++)
        {
            ;k<N;k++)
            {
                ])
                {
                    temp=Arr[k];
                    Arr[k]=Arr[k+];
                    Arr[k+]=temp;
                }
            }
        }

        ==)//N是偶数,两两相乘即可。
        {
            ;j<N;j=j+)
            {
                sum=sum+Arr[j]*Arr[j+];
            }
        }
        else//N是奇数的情况
        {
            k=;
            ;j<N;j++)
            {
                )
                {
                    k++;//记录负数的个数
                }
            }
            ==) //数组中正奇、负偶:跳过第一个正数Arr[k]
            {
                ;j<N;j=j+)
                {
                    if(j!=k)
                    {
                        sum=sum+Arr[j]*Arr[j+];
                    }
                    else
                    {
                        sum=sum+Arr[k];
                        j--;
                    }
                }
            }
            else//数组中正偶、负奇:跳过最后一个负数Arr[k-1]
            {
                ;j<N;j=j+)
                {
                    ))
                    {
                        sum=sum+Arr[j]*Arr[j+];
                    }
                    else
                    {
                        sum=sum+Arr[k-];
                        j--;
                    }
                }
            }
        }
        result[i]=sum;
    }
    ;i<num;i++)
        printf("%d\n",result[i]);

    ;
}

但是这个程序,现在没有正确通过,在本地运行是没问题的,但是在geeksforgeeks上结果如下:

who can help me?

Find the Maximum sum的更多相关文章

  1. POJ2479 Maximum sum[DP|最大子段和]

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39599   Accepted: 12370 Des ...

  2. ural 1146. Maximum Sum

    1146. Maximum Sum Time limit: 0.5 secondMemory limit: 64 MB Given a 2-dimensional array of positive ...

  3. UVa 108 - Maximum Sum(最大连续子序列)

    题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...

  4. 最大子矩阵和 URAL 1146 Maximum Sum

    题目传送门 /* 最大子矩阵和:把二维降到一维,即把列压缩:然后看是否满足最大连续子序列: 好像之前做过,没印象了,看来做过的题目要经常看看:) */ #include <cstdio> ...

  5. URAL 1146 Maximum Sum(最大子矩阵的和 DP)

    Maximum Sum 大意:给你一个n*n的矩阵,求最大的子矩阵的和是多少. 思路:最開始我想的是预处理矩阵,遍历子矩阵的端点,发现复杂度是O(n^4).就不知道该怎么办了.问了一下,是压缩矩阵,转 ...

  6. ural 1146. Maximum Sum(动态规划)

    1146. Maximum Sum Time limit: 1.0 second Memory limit: 64 MB Given a 2-dimensional array of positive ...

  7. UVa 10827 - Maximum sum on a torus

    题目大意:UVa 108 - Maximum Sum的加强版,求最大子矩阵和,不过矩阵是可以循环的,矩阵到结尾时可以循环到开头.开始听纠结的,想着难道要分情况讨论吗?!就去网上搜,看到可以通过补全进行 ...

  8. POJ 2479 Maximum sum 解题报告

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40596   Accepted: 12663 Des ...

  9. [LeetCode] Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

随机推荐

  1. 一位有着工匠精神的博主写的关于IEnumerable接口的详细解析

    在此,推荐一位有着工匠精神的博主写的一篇关于IEnumerable接口的深入解析的文章:http://www.cnblogs.com/zhaopei/p/5769782.html#autoid-0-0 ...

  2. C#图片压缩上传

    /// <summary> /// 压缩图片 /// </summary> /// <param name="iSource">图片文件< ...

  3. TP框架中内置查询IP函数

    系统内置了get_client_ip方法用于获取客户端的IP地址,使用示例: $ip = get_client_ip(); 如果要支持IP定位功能,需要使用扩展类库Org\Net\IpLocation ...

  4. 《Linux命令行与shell脚本编程大全》第二十章 正则表达式

    20.1 什么是正则表达式 20.1.1 定义 正则表达式是你所定义的模式模板.linux工具可以用它来过滤文本. 正则表达式利用通配符来描述数据流中第一个或多个字符. 正则表达式模式含有文本或特殊字 ...

  5. 原生javascript选项卡

    js选项卡是一个常用的实现.这里我们将用原生js来将其给予实现. 首先html代码: <div id="container"> <input type=" ...

  6. windows配置git

    每次要使用git指令的时候都要去打开git bash 操作,太麻烦,要想直接在dos窗口下使用git指令需要再进行如下环境变量配置. 1.系统环境变量path添加:D://programFiles/g ...

  7. php 写程序求三个数的最大值

    最简单的调用PHP自带的max函数即可:echo max(1,2,3,4,5);如果要自定义函数的话:function test($a,$b,$c){ return $a > $b ?($a & ...

  8. gem install报错

    [root@app-test ruby-2.2.3]# gem install capistrano -v 2.15 ERROR:  While executing gem ... (Gem::Rem ...

  9. YiShop_做个网上商城系统多少钱

    随着国内电商的兴起,不少企业和个人卖家都已经意识到电商的重要性,于是就开始搭建自己网上商城,但是还是有很多人对网上商城还不是很了解,今天就由YiShop小编跟大家讲解网上商城系统的一些知识一.网上商城 ...

  10. 学习python登录demo

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...