题目大意:给出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. True bar

    真彩bar /***========================================================================= ==== ==== ==== D ...

  2. POJ 2762 tarjan缩点+并查集+度数

    Going from u to v or from v to u? Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15494 ...

  3. 算法导论-钢条切割 C# 递归实现

    下班前看到有位兄弟写 钢条切割问题,尝试实现C#版, 还没有实现最优版,分享一下. int[] parr; private void button1_Click(object sender, Even ...

  4. UITableViewCell Property “icon” cannot be found in forward class object “DJWeiBo”

    UITableViewCell 自定义表格 实体属性不显示错误 Property “icon” cannot be found in forward class object “DJWeiBo”引入实 ...

  5. SharedPreference 存储小量数据,一般首次启动显示引导界面就用这个。

    写://添加一个SharedPreference并传入数据SharedPreference sharedPreferences = getSharedPreferences("share_d ...

  6. Mac下为我们开发的App制作gif动画演示(不仅仅针对开发者,想做gif图片的也可参考)

    趁着工作不忙,就闲着倒腾自己的事情,把自己写的一个完整App<丁丁印记>整理了一番,总结其中用到的技术和实现的功能,并想把一些用到的技术分享给各位工友们,因为我自学iOS开发得益于大家的分 ...

  7. 知道创宇研发技能表v3.0

    知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关 ...

  8. 玩转渗透神器Kali:Kali Linux作为主系统使用的正确姿势TIPS

    Kali Linux 前身是著名渗透测试系统BackTrack ,是一个基于 Debian 的 Linux 发行版,包含很多安全和取证方面的相关工具. 本文假设你在新装好的kali linux环境下… ...

  9. SVG 2D入门8 - 文档结构

    前面介绍了很多的基本元素,包括结构相关的组合和重用元素,这里先对SVG的文档结构中剩下的相关元素简单总结一下,然后继续向前领略SVG的其他特性. SVG文档的元素基本可以分为以下几类: 动画元素:an ...

  10. hdu 2075

    PS:水得不能再水..刚开始还以为是大数..要用到快速幂...谁知道想太多...就普通int型.. 代码: #include "stdio.h" int main(){ int a ...