| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【洛谷】【动态规划】【高精度】P1018 [NOIP2000 提高组] 乘积最大 -> 正文阅读 |
|
[数据结构与算法]【洛谷】【动态规划】【高精度】P1018 [NOIP2000 提高组] 乘积最大 |
题目链接:https://www.luogu.com.cn/problem/P1018 题目描述今年是国际数学联盟确定的“ 2000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 90 周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友 XZ 也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为 N 的数字串,要求选手使用 K 个乘号将它分成 K+1 个部分,找出一种分法,使得这 K+1 个部分的乘积能够为最大。 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当 N=3,K=1 时会有以下两种分法:
这时,符合题目要求的结果是: 31×2=62 现在,请你帮助你的好朋友 XZ 设计一个程序,求得正确的答案。 输入格式程序的输入共有两行: 第一行共有 2 个自然数 N,K(6≤N≤40,1≤K≤6) 第二行是一个长度为 N 的数字串。 输出格式结果显示在屏幕上,相对于输入,应输出所求得的最大乘积(一个自然数)。 测试样例
解题思路用一个数组cnt[i][j]存储在第i个数字后放第j个乘号,第1到第i个数的乘积的最大值。 如果j=k,说明所有的乘号都已经放完,那么ans[i]就表示最后一个乘号放在第i个数后面的最大值,此时要乘上后面的数。因为后面的数是一定的,cut[i][j]是已知的最大值,所以ans[i]可以由唯一的路径转移。 最后比较所有的ans[i],选择最大值输出。 完成以上步骤需要至少三个操作: 1.取数 将没有乘号分隔的连续的数字变成一个数,进行运算 2.比较 没有比较哪来的最大值 3.乘法 将乘号两边取到的数乘起来 由于n<=40,所以这些操作要用高精度的方式进行 AC代码
|
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:45:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |