算法训练 最大的算式

时间限制:1.0s 内存限制:256.0MB

问题描述

  题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号。例如:

  N=5,K=2,5个数字分别为1、2、3、4、5,可以加成:

  12(3+4+5)=24

  1*(2+3)(4+5)=45

  (1
2+3)*(4+5)=45

  ……

输入格式

  输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行为 N个用空格隔开的数字(每个数字在0到9之间)。

输出格式

  输出文件仅一行包含一个整数,表示要求的最大的结果

样例输入

5 2

1 2 3 4 5

样例输出

120

样例说明

  (1+2+3)45=120

package 第十九次模拟;

import java.util.Scanner;

public class 最大的算式 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int [] sum = new int [n+1];
int [] num = new int [n+1];
for (int i = 1; i <=n; i++) {
num[i]=sc.nextInt();
sum[i]=sum[i-1]+num[i];
// System.out.print(sum[i]);
}
sc.close();
long dp [] [] = new long [n+1][k+1];
for (int i = 1; i <=n; i++) {
dp[i][0]=sum[i];
}
//dp[i][j]是第i位数用了j个乘
for (int i = 2; i <=n; i++) {
for (int j = 1; j <=Math.min(i-1, k); j++) {
for (int j2 = 2; j2 <=i; j2++) {
dp[i][j]=Math.max(dp[i][j], dp[j2 - 1][j - 1] * (sum[i] - sum[j2 - 1]));
}
}
}
System.out.println(dp[n][k]);
} }
import java.util.Scanner;

public class 最大的算式 {
//求取数组A[start]到A[end]之间元素总和
public static long getSum(int[] A, int start, int end) {
long sum = 0;
for(int i = start;i <= end;i++)
sum += A[i];
return sum;
}
/*
* 参数start:数组A中开始划分元素的起始位置
* 参数multi:进行乘法运算的个数
*/
public static long getMax(int[] A, int start, int multi) { if(multi == 0)//当没有乘法的时候把后面的都加起来
return getSum(A, start, A.length - 1);
long max = 0;
for(int i = start;i < A.length - 1;i++) {
//此处i < A.length - 1原因是递归时start = i + 1,且start要小于等于A.length - 1
long tempMax = getSum(A, start, i) * getMax(A, i + 1, multi - 1);
max = (max < tempMax ? tempMax : max);
}
return max;
} public static void main(String[] args){ Scanner in = new Scanner(System.in);
// System.out.println("请分别输入一个整数n和一个整数k:");
int n = in.nextInt();
int k = in.nextInt();
int[] A = new int[n];
for(int i = 0;i < n;i++)
A[i] = in.nextInt();
System.out.println(getMax(A, 0, k));
} }

Java实现 蓝桥杯 算法训练 最大的算式的更多相关文章

  1. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  2. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  3. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  4. Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题

    试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...

  5. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  6. Java实现 蓝桥杯 算法训练 审美课

    算法训练 审美课 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 <审美的历程>课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手.老师 ...

  7. Java实现 蓝桥杯 算法训练 多阶乘计算

    试题 算法训练 多阶乘计算 问题描述 我们知道,阶乘n!表示n*(n-1)(n-2)-21, 类似的,可以定义多阶乘计算,例如:5!!=531,依次可以有n!..!(k个'!',可以简单表示为n(k) ...

  8. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  9. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

随机推荐

  1. 一阶RC高通滤波器详解(仿真+matlab+C语言实现)

    文章目录 预备知识 关于电容 HPF的推导 simulink 仿真 simulink 运行结果 matlab 实现 matlab 运行结果 C语言实现 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你 ...

  2. Java--ArrayList的遍历

    三种遍历方式 一.for循环 二.for each 三.Iterator器遍历 Iterator it = list.iterator(); while(it.hasNext()){ syso(it. ...

  3. Spark SQL源码解析(四)Optimization和Physical Planning阶段解析

    Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 Spark SQL源码解析(二)Antlr4解析Sql并生成树 Spark SQL源码解析(三 ...

  4. printf小结

    下午健身前和lxt兄弟讨论了一个关于 printf 输出的问题,恰巧以前见过类似的,回来写一个收获总结. 首先看一个这样一个例子 #include<cstdio> int i; int m ...

  5. [Alink漫谈之三] AllReduce通信模型

    [Alink漫谈之三] AllReduce通信模型 目录 [Alink漫谈之三] AllReduce通信模型 0x00 摘要 0x01 MPI是什么 0x02 Alink 实现MPI的思想 0x03 ...

  6. 【clear linux】intel clear linux 电源状态命令

    # 重启系统 $ sudo systemctl reboot # 关闭系统,切断电源 $ sudo systemctl poweroff # CPU停止工作 $ sudo systemctl halt ...

  7. SQLServer分组加序号,只取某个对象指定条件的前几个

    --  -- 删除base里冗余的数据  --UPDATE dbo.N_Order_ServiceLog SET IsDel = 1 WHERE OrderId IN (  SELECT OrderI ...

  8. Java并发II

    Java并发 J.U.C图 一.线程的安全性 当多个线程访问某个类的时候,不管运行环境采用何种方式调度或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都可以表现出正确的行 ...

  9. Linux设定系统变量和单个用户的环境变量问题

    环境为Ubuntu. 设定系统变量意思就是所有用户都可以使用设定的环境变量,而设定用户的单个环境变量意思就是只有设定环境的该用户才可以使用这个环境变量. 这里以java的jdk环境变量JAVA_HOM ...

  10. sonar 安装,centos7配置优化

    /etc/sysctl.conf /etc/systemd/system.conf /etc/security/limits.conf /proc/sys/fs/file-max /etc/secur ...