题目大意:给出n个数,从中选取k个,使得乘积最大,并且尽量使和最大

分析:首先按照数的绝对值大小排序。然后就要分三大类情况讨论:

(1)前k个中选到0:如果选到0的话,乘积一定是0,所以尽量选大的数,让和变大。

(2)前k个中选到负数的个数为偶数:这样的话直接输出答案(一定为最优解)

(3)前k个中选到的负数个数为奇数:这类情况比较复杂,还要分成两个子类:

a)k个中没有正数:

如果换正数:优先用正数替换最小的负数;否则注定乘积为负数或者0:选最大的k个。

b)k个中有正数:

还有正数和负数:比较最优; 只有正数:选用负数; 只有负数:选用正数;

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[100000],n;
int Sum(int k)
{
int sum=0;
sort(a+1,a+1+n);
for(int i=1;i<=k;i++)
sum+=a[n-i+1];
return sum;
}
int cmp(int b,int c)
{
if(abs(b)!=abs(c))
return abs(b)>abs(c);
else
return b>c;
}

int main()
{
int k;
while(scanf("%d %d",&n,&k)!=EOF&&n+k)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1,cmp);
int flag=0,sum=0,p=0,q=0,tot=0;
for(int i=1;i<=k;i++)
{
if(a[i]==0)
{
flag=1;
break;
}
else if(a[i]<0)
{
tot++;
q=a[i];
}
else
{
p=a[i];
}
sum+=a[i];
}

if(flag==1)
printf("%d\n",Sum(k));
else if(tot%2)
{
int x=0,y=0,te0=0;
for(int i=k+1;i<=n;i++)
{
if(a[i]>0)
{
x=a[i];
break;
}
}
for(int i=k+1;i<=n;i++)
{
if(a[i]<0)
{
y=a[i];
break;
}
}
for(int i=k+1;i<=n;i++)
{
if(a[i]==0)
{
te0=a[i];
break;
}
}
if(p==0)
{
if(x)
printf("%d\n",sum-q+x);
else
printf("%d\n",Sum(k));
}
else
{
if (x == 0 && y == 0) sum = Sum(k);
else if (x == 0) sum = sum - p + y;
else if (y == 0) sum = sum - q + x;
else if (x * p >= y * q) sum = sum - q + x;
else sum = sum - p + y;
printf("%d\n",sum);
}
}
else
printf("%d\n",sum);
}
return 0;
}

UVa 10747 - Maximum Subsequence的更多相关文章

  1. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  2. 1007. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  3. PAT - 测试 01-复杂度2 Maximum Subsequence Sum (25分)

    1​​, N2N_2N​2​​, ..., NKN_KN​K​​ }. A continuous subsequence is defined to be { NiN_iN​i​​, Ni+1N_{i ...

  4. Maximum Subsequence Sum(接上篇)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  5. PAT 解题报告 1007. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  6. 最大子列和CT 01-复杂度2 Maximum Subsequence Sum

    Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A continuous subsequence is defined to ...

  7. 连续子数组的最大和/1007. Maximum Subsequence Sum (25)

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  8. Algorithm for Maximum Subsequence Sum z

    MSS(Array[],N)//Where N is the number of elements in array { sum=; //current sum max-sum=;//Maximum ...

  9. 数据结构练习 01-复杂度2. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

随机推荐

  1. Redis persistence demystified - part 2

    重写AOF 当AOF文件太大时,Redis将在临时文件重新写入新的内容.重写不会读取旧的AOF文件,而是直接访问内存中数据,以便让新产生的AOF文件最小,重写过程不需要读取磁盘. 重写完成后,Redi ...

  2. flash as3 socket安全服务网关(socket policy file server)

    关键字: SecurityErrorEvent socket as3 flash有着自己的一套安全处理模式,在socket方面,我这样的菜鸟无法理解他的好处:一句话,不怀好意的人如果想用flash写一 ...

  3. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.

    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The ...

  4. ubuntu 14.04 安装 foxit pdf阅读器

    1.官网下载 http://www.foxitsoftware.cn/downloads/ 2.安装 tar -zxvf FoxitReader1.01.0925_Server_x64_enu_Set ...

  5. Android利用ContentProviderOperation添加联系人

    Android添加联系人有两种方式: 1. 直接调用插入语句,先插入一个空Item,得到一个id,然后给这个id对应的插入其他信息,如姓名,号码,邮件等: 2. 利用ContentProviderOp ...

  6. STL-算法

    #include <algorithm> 1. max_element(v.begin(), v.end()); 注意,所有的区间全部是半开区间,如果数组包含20-40,通过find找出2 ...

  7. java.lang.ExceptionInInitializerError

    java.lang.ExceptionInInitializerError at com.csdhsm.compiler.test.DevTest.testReadInput(DevTest.java ...

  8. Quartz2D

    http://donbe.blog.163.com/blog/static/138048021201052093633776/ 详解 代码如下: DJView 绘制线段 基本图形 // // DJVi ...

  9. 五大要求让BPM与企业对接

    BPM(即业务流程管理)在中国已经有多年的发展历史,但人们经常提到的还是企业对流程的迫切需要,鲜有人讨论什么样的企业才能实施BPM,或者换句话说BPM的本身对企业有什么要求.不是所有的工作都适合BPM ...

  10. 最新的goldengate monitor 12.1.3已经发布

    Oracle GoldenGate管理包针对OGG提供企业级的监控和管理,包含有如下模块: Oracle Enterprise Manager Plug-in. 利用OEM框架查看.管理和预警OGG ...