算法训练 乘积最大

试题 算法训练 乘积最大 试题 算法训练 乘积最大 问题描述   今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:   设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。   同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:   有一个数字串: 阅读详情

问题描述

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

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

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

有一个数字串:312, 当N=3,K=1时会有以下两种分法:3 * 12=36
  
  31 * 2=62

这时,符合题目要求的结果是:31*2=62

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

输入格式

程序的输入共有两行:
  第一行共有2个自然数N,K(6≤N≤40,1≤K≤6)
  第二行是一个长度为N的数字串。

输出格式

输出所求得的最大乘积(一个自然数)。

样例输入

4 2
1231

样例输出

62
//注释:62=1 * 2 * 31

算法分析

这是一道明显的动态规划题目。
思路同举证乘法,从中间某处断开,根据最优子结构性质划分出规模更小的子问题。

算法中用nlp[i][j]表示从第1个数字到第i个数字中加入j个乘号之后的最优值。
显然,i个数字中最多能够加入i-1个乘法符号,那么0<=j<=i-1。

如果在1到i中的k处断开,将序列分成1到k-1段和k到i段
在断开的地方加入乘号(k的取值范围:2<=k<=i),那么此时
nlp[i][j]=nlp[k-1][j-1]*(从第k到i连续的数字组成的整数值)

这里问题又缩小到从第k到第i的连续的数字如何表示成整数值的问题。

nlp[i][0]表示从第1个数字到第i个数字自然连接的整数值。

例如:nlp[4][0]=1231
nlp[2][0]=12

那么从第k到第i的连续的数字如何表示成整数值即为nlp[4][0]-nlp[2][0]*2

所以如果在1到i中的k处断开,将序列分成1到k-1段和k到i段
在断开的地方加入乘号,那么此时

nlp[i][j]=nlp[k-1][j-1]*(nlp[i][0]-(nlp[k-1][0]*10(i-(k-1))));

AC源代码

#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n;//6<=n<=40
int k;//k表示乘法次数
long long  a[41];
//nlp[i][j]表示从1-i的长度中加上j个乘法
long long nlp[41][41];
//求10的乘方
long long  Rax10(int n)
{
    if(n==0)  return 1;
    else if(n==1) return 10;
    else return 10*Rax10(n-1);
}
int main()
{
    cin>>n>>k;
    string s;
    cin>>s;
    //分离出每一位
    for(int i=1;i<=n;i++){
        a[i]=s[i-1]-'0';
    }
    //给nlp[i][0]赋值
    //nlp[i][0]表示从1到i的数中间自然连接不用乘号的数值
    long long temp=0;//以防数据过大,中间变量内存最大化
    for(int i=1;i<=n;i++){
        temp=temp*10+a[i];
        nlp[i][0]=temp;
    }
    //若想求从i到j的字符对应的数字为多少
    //(nlp[j][0]-(nlp[i][0])*Rax10(j-i))
    for(int i=2;i<=n;i++)
    for(int j=1;j<=i-1;j++){
        //假设先从最后一个位置k=i处断开,即倒数第一个数字之前
        //那么nlp[i][j]=
        nlp[i][j]=nlp[i-1][j-1]*(nlp[i][0]-(nlp[i-1][0]*Rax10(1)));
        //之后k在2到i-1之中寻找能否更新nlp
        for(int k=2;k<i;k++)
            if(nlp[i][j]<nlp[k-1][j-1]*(nlp[i][0]-(nlp[k-1][0]*Rax10(i-k+1))))
                nlp[i][j]=nlp[k-1][j-1]*(nlp[i][0]-(nlp[k-1][0]*Rax10(i-k+1)));
    }
    /*for(int i=1;i<=n;i++){
        for(int j=0;j<i;j++)
            cout<<nlp[i][j]<<" ";
        cout<<endl;
    }*/
    cout<<nlp[n][k];
    return 0;
}

更多样例

样例输入2:

10 5
7777777777

样例输出2:

1722499009

在这里插入图片描述

蓝桥杯 算法训练 乘积最大(动态规划) 问题描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手... 阅读详情

相关推荐

【动态规划】乘积最大

今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312,当N=3,K=1时会有以下两种分法: 3*12=

qq_42397914的博客 939

洛谷P1018乘积最大题解--zhengjun

题目描述 今年是国际数学联盟确定的“ 200020002000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰909090周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZXZXZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为NNN的数字串,要求选手使用KKK个乘号将它分成K+1K+1K+1个部分,找出一种分法,使...

A_zjzj的博客 699

算法设计实验-最大k乘积问题

算法设计实验-最大k乘积问题 亲自用Dev-C++测试实验结果,没有任何问题!

HLG 1212 乘积最大

Description 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘...

weixin_33724059的博客 445

Renesas:定时器输入捕获

一、PWM输入捕获 1、Smart Configurator配置 注意:在使用前,需要使能对应的定时器!否侧无法正常进行输入捕获! 2、脉冲宽度的获取 如何区分高低电平的脉冲宽度:最常用的方法就是在触发中断后,判断IO口的高低电平,来确认是上升沿触发的中断还是下降沿触发的中断。 若无法进入中断,可查看:Renesas:配置中断的常规流程 (1)中断方式(Smart Configurator生成的代码) #pragma interrupt r_Config_TAUB0_0_i...

不吃鱼的猫的博客 2485

图像传感器与信号处理——详解CCD与CMOS图像传感器

一文详解CCD与CMOS图像传感器一文详解CCD与CMOS图像传感器1. 图像传感器性能关键词1.1 噪声1.2 暗电流 一文详解CCD与CMOS图像传感器 本文主要总结了CCD与CMOS传感器的原理知识,参考书籍为《数码相机中图像传感器和信号处理》,英文版为《Image Sensors And Signal Processing for Digital Still Cameras》 1. 图像传...

weixin_44580210的博客 2万+

蓝桥杯 ALGO-17 算法训练 乘积最大

算法训练 乘积最大 时间限制:1.0s 内存限制:256.0MB 问题描述   今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:   设有一个长度为N的数字串,要求选手使用K个乘...

荔枝的FM 324

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1729

蓝桥杯——算法训练之乘积最大

设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。   同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:   有一个数字串:312, 当N=3,K=1时会有以下两种分法:   3*12=36   31*2=62   这时,符合题目要求的结果是:31*2=62   现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。

hymanxq的专栏 5759

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 356

【3D目标检测】MMdetection3d——搭建IS-Fusion环境+nuScenes数据集训练

搭建IS-Fusion环境+nuScenes数据集训练

qq_44703886的博客 2324

蓝桥杯 算法训练 乘积最大(动态规划)

问题描述   今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:  设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。  同时,...

langzitan123的博客 2004

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点

本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。

weixin_28077113的博客 495

蓝桥杯算法训练 乘积最大

#include #include #include #include #include #include #include using namespace std; const int maxn = 55; int n,m; int num[maxn],dp[maxn][maxn]; int GetVal( int s,int e ) { int ans = 0; for( in

菜鸟成长ing 1160

3GPP LTE/NR信道模型

CDL(Clustered Delay Line):簇延迟线模型,包括CDL-A、CDL-B、CDL-C三个用于NLOS的信道模型,以及CDL-D、CDL-E两个用于LOS的信道模型。

LinkEverything的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝桥杯算法训练 乘积最大java

问题描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手...

weixin_43824233的博客 638

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【蓝桥杯】 算法训练 乘积最大

问题描述   今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZXZXZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:   设有一个长度为NNN的数字串,要求选手使用KKK个乘号将它分成K+1K+1K+1个部分,找出一种分法,使得这K+1K+1...

小二笙的博客 1859

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

蓝桥杯 算法训练 乘积最大Python实现(动态规划)详细

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分...

bianxia123456的博客 1750
上一篇: 导弹拦截问题
下一篇: 最大公约数和最小公倍数问题
practical_sharp
博客等级 码龄8年 499粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值