题目描述

今年是国际数学联盟确定的“20002000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰9090周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZXZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:

设有一个长度为NN的数字串,要求选手使用KK个乘号将它分成K+1K+1个部分,找出一种分法,使得这K+1K+1个部分的乘积能够为最大。

同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:

有一个数字串:312312, 当N=3,K=1N=3,K=1时会有以下两种分法:

1、3 \times 12=363×12=36 2、31 \times 2=6231×2=62

这时,符合题目要求的结果是: 31 \times 2 = 6231×2=62

现在,请你帮助你的好朋友XZXZ设计一个程序,求得正确的答案。

输入输出格式

输入格式:

程序的输入共有两行:

第一行共有22个自然数N,KN,K(6≤N≤40,1≤K≤66≤N≤40,1≤K≤6)

第二行是一个长度为NN的数字串。

输出格式:

结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。

输入输出样例

输入样例#1: 复制

4  2
1231
输出样例#1: 复制

62

分析:

一个很明显的dp问题,但是数字因为结果数字太大,所以要用到大数类,就是Biginteger。

我开辟了一个二维数组 res[k+1][len+1] ,其中 k+1 是用到了几个乘号,len 就是记录最后一个数字的位置。

动态转移方程很简单:dp[n][m]=Math.max(dp[n][m],dp[n-1][m]*最后一个要乘的数字);

代码:

 import java.math.BigInteger;
import java.util.Scanner; public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int k=sc.nextInt();
String str=sc.next();
int len=str.length();
BigInteger[][] res=new BigInteger[k+1][len+1];
for(int n=1;n<=len;++n)
res[0][n]=new BigInteger(str.substring(0,n));
for(int i=1;i<=k;++i)
for(int j=1;j<=len;++j)
for(int n=j-1;n>0;--n) {
if(res[i-1][n]==null)
continue;
BigInteger b=new BigInteger(str.substring(n,j));
BigInteger r=res[i-1][n].multiply(b);
if(res[i][j]==null)
res[i][j]=r;
else
res[i][j]=res[i][j].max(r);
}
System.out.print(res[k][len]);
}
}

其中有一个判定大数为空的话,就直接跳过的if语句。首先开辟的大数数组和int数组是一样的,他的初始值不是0而是null,所以如果你不给他赋值的话他就是null,是无法计算的。

如果当前数组位置为null的话,就说明不会有这种情况,比如res[2][1],你只有长度为1的数字,是无论如何也无法用两个乘号去运算的,所以直接跳过就可以了,不必纠结。

洛谷 P1018乘积最大的更多相关文章

  1. 洛谷 P1018 乘积最大

    P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...

  2. 洛谷P1018乘积最大——区间DP

    题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...

  3. [NOIP2000] 提高组 洛谷P1018 乘积最大

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  4. 洛谷—— P1018 乘积最大

    https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...

  5. java实现 洛谷 P1018 乘积最大

    import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...

  6. 洛谷 P4902 乘积 (约数筛,前缀和(积))

    洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...

  7. 洛谷P4902乘积

    题面链接 洛谷 题意简述 求\(\prod_{i=A}^B\prod_{j=1}^i \lgroup \frac{i}{j} \rgroup ^{\lfloor \frac{i}{j} \rfloor ...

  8. 乘积最大洛谷p1018

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  9. 【洛谷P1018】乘积最大 dp+高精度

    题目大意:给定一个 N 个数组成的串,可以在串中插入 M 个乘号,求乘积最大是多少.N <= 40 阶段:前 i 个数用了 j 个乘号. 仅用阶段可以表示出一个状态,因此状态转移方程为 \(dp ...

随机推荐

  1. 原型与继承与class

    对象有属性(专业点叫静态属性)和方法(专业点叫静态方法)和原型属性和原型方法 除了系统自带的那么几百万个对象,我们自己写在js的创建的对象,自定义的对象,都来自对象的构造函数,用来构造对象的函数,叫做 ...

  2. stl_map复习

    set和map的底层模板是红黑树,可以有不同的键值和实值,关于增删改查,迭代器的使用都在代码里面,亲手尝试更方便记忆 #include <iostream>#include <map ...

  3. python_os 的知识点

    1. os.getcwd() #获得当前路径 2. os.listdir(path) #列出path路径下的所有目录名和文件名包括后缀 3. os.mkdir(path) #在path创建一个目录 4 ...

  4. POJ 1330:Nearest Common Ancestors

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20940   Accept ...

  5. Spring Boot2(007):关于Spring beans、依赖注入 和 @SpringBootApplication 注解

    一.关于Spring beans 和 依赖注入(Dependency Injection) spring boot 和 Spring 全家桶无缝衔接,开发过程中可以很轻松地使用 Spring 全家桶的 ...

  6. 开源DDD设计模式框架YMNNetCoreFrameWork第五篇-Swagger增加权限认证

    配置文件services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = " ...

  7. 通过html5 touch事件封装手势识别组件

    html5移动端新增了touchstart,touchmove,touchend事件,利用这3个事件,判断手指的点击和划动轨迹,我们可以封装各种手势的识别功能, 这3个事件和pc端的mousedown ...

  8. 线段树&树状数组与离散化的妙用

    牛客2019多校联盟Day7 Fine the median 题意:  每次给数组插入区间[Li,Ri] 内的所有数,每操作一次查询中位数. 遇到这题真的算是巧合,然而就是这种冥冥之中的缘分,给了我线 ...

  9. 环境变量和文件查找&文件打包与解压缩

    环境变量和文件查找 介绍环境变量的作用与用法 及几种搜索文件的方法 学会这些技巧可以高效地使用 Linux 知识点:环境变量的设置 环境变量的修改 环境变量 要解释环境变量,得先明白变量是什么,准确的 ...

  10. 51nod 1191:消灭兔子 贪心+优先队列

    1191 消灭兔子 题目来源: 2013腾讯马拉松赛第三场 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有N只兔子,每只有一个血量B[i],需要 ...