zoukankan      html  css  js  c++  java
  • 算式最大值 (思维题)

    【问题描述】

    给定:

    1)N个正整数A1, A2, … AN;

    2)P个加号+和Q个减号-; (P+Q=N-1)

    3)K对括号()

    请你使用全部整数、加减号和括号,组成一个合法的算式(A1~AN在算式中的顺序随意),使得算式的结果最大。

    注意加减号只能作为二元运算符出现在算式中,不能作为正负号。

    括号可以出现在算式最左和最右,例如(((1+2)))是合法的。

    例如对于样例数据,(2-1)+3或3+(2-1)等都是结果最大的算式。

    【输入】

    第一行包含4个整数,N,P, Q和K。

    第二行包含N个整数A1, A2, … AN。

    2 ≤ N ≤ 100 P+Q+1=N 0 ≤ K ≤ 10

    1 ≤ Ai ≤ 1000

    【输出】

    最大算式结果

    【样例输入】

    3 1 1 1

    1 2 3

    【样例输出】

    4

    思路:输入的所有数都是正整数,如果没有括号的话,我们只需要减去最小的q个数;如果有括号的话,我们可以利用括号将q个减号变为1个减号即:a+b-(c-d-e),此时我们只要减去最小的那个数即可。
    代码:

    #include <stdio.h>
    #include <stdlib.h>
    int n,p,q,k,a[105],sum;
    int kk(const void *a,const void *b)
    {
    	return *(int *)a-*(int *)b;
    }
    int main()
    {
    	scanf("%d%d%d%d",&n,&p,&q,&k);
    	for(int i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	qsort(a,n,sizeof(int ),kk);
    	if(k==0)
    	{
    		for(int i=0;i<n;i++)
    		{
    			if(i<q)
    			{
    				sum-=a[i];
    			}
    			else
    			{
    				sum+=a[i];
    			}
    		}
    	}
    	else
    	{
    		for(int i=1;i<n;i++)
    		{
    			sum+=a[i];
    		}
    		sum-=a[0];
    	}
    	printf("%d",sum);
    	return 0;
    }
    
  • 相关阅读:
    Google的Java常用类库 Guava资料
    Java 理论与实践: 哈希
    7 款开源 Java 反编译工具
    Eclipse传递main函数参数
    Java程序员常用工具类库
    Eclipse 安装插件
    学习Javascript的8张思维导图
    java开发者最常去的20个英文网站
    关于工作效率的心得分享
    ProtoBuf开发者指南
  • 原文地址:https://www.cnblogs.com/fxzemmm/p/14847983.html
Copyright © 2011-2022 走看看