博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 1018 乘积最大
阅读量:6543 次
发布时间:2019-06-24

本文共 1121 字,大约阅读时间需要 3 分钟。

题目描述

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

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

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

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

1) 3*12=36
2) 31*2=62
   
   这时,符合题目要求的结果是:31*2=62

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

4  21231

输出样例#1:

62

说明

NOIp2000提高组第二题

解题思路

划分型DP,f[i,j]表示前i个数中有j个乘号的最大积

f[i,j]:=max(f[k,j-1]*a)(k=1 to i-1)

1 program mult; 2 uses math; 3 var 4 f:Array[0..40,0..6] of qword; 5 n,k,x,i,j,l,a,c:Longint; 6 s,s1:string; 7 begin 8     readln(n,x); 9     readln(s);10     l:=length(s);11     for i:=1 to l do12     begin13          s1:=copy(s,1,i);14          val(s1,a,c);15          f[i,0]:=a;16     end;17     for i:=2 to l do//第几个数18         for j:=1 to i-1 do19             for k:=1 to min(i-1,x) do20             begin21                 s1:=copy(s,j+1,i-j);22                 val(s1,a,c);23                 if f[i,k]

 

转载于:https://www.cnblogs.com/wuminyan/p/4737763.html

你可能感兴趣的文章
有关sqlite与sql
查看>>
MapXtreme 2005 学习心得 概述(一)
查看>>
php进一法取整、四舍五入取整、忽略小数等的取整数方法大全
查看>>
Hibernate的拦截器和监听器
查看>>
游戏中学习Bash技能
查看>>
ubuntu 12.04系统托盘不显示ibus输入法图标的解决方法
查看>>
WSDP
查看>>
Memory Management
查看>>
The Packaging Process in Yocto/OE
查看>>
JQUERY 对 表格中的数据重排序
查看>>
程序员常用借口指南
查看>>
关于PXE网络安装linux系统中碰到的个别问题
查看>>
awk 常用方法
查看>>
Android网络框架实现之【Retrofit+RxJava】
查看>>
Android文件的加密与解密
查看>>
SOAP webserivce 和 RESTful webservice 对比及区别
查看>>
【原】记录一句话
查看>>
Android标题栏,状态栏
查看>>
Windows下安装Memcached for PHP
查看>>
hdu 1040 As Easy As A+B
查看>>