网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月01日漏签0天
noip吧 关注:25,180贴子:642,054
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 1 2 下一页 尾页
  • 18回复贴,共2页
  • ,跳到 页  
<<返回noip吧
>0< 加载中...

【求助】《乘积最大》 求题解 pascal的 要比较容易看得懂的~~~~

  • 只看楼主
  • 收藏

  • 回复
  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今年是国际数学联盟确定的“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设计一个程序,求得正确的答案。
输入格式 Input Format
程序的输入共有两行:
第一行共有2个自然数N,K (6<=N<=40,0<=K<=5)
第二行是一个K度为N的数字串。
输出格式 Output Format
结果输出到文件,相对于输入,应输出所求得的最大乘积(一个自然数)。
样例输入 Sample Input [复制数据]
4 2
1231
样例输出 Sample Output [复制数据]
62



  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求题解~~神犇路过指点一下~~


2025-11-01 18:43:22
广告
不感兴趣
开通SVIP免广告
  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
没有人么?


  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
神牛啊~~神犇啊~~~救救我吧


  • X_striker
  • 省选酱油
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我刚写好这个。。~
program chen;
var n,k,i,j,l:integer;
a:array[0..50] of integer;
sum,f:array[0..50,0..50] of int64;
ch:char;
function max(x,y:int64):int64;
begin
if x>y then exit(x) else exit(y);
end;
procedure init;
begin
readln(n,k);
fillchar(sum,sizeof(sum),0);
for i:=1 to n do
begin
read(ch);
val(ch,a[i]);
sum[i,i]:=a[i];
end;
fillchar(f,sizeof(f),0);
for i:=1 to n-1 do
for j:=i+1 to n do
sum[i,j]:=sum[i,j-1]*10+a[j];
for i:=1 to n do
f[0,i]:=sum[1,i];
end;
begin
init;
for i:=1 to k do
for j:=i to n do
for l:=1 to j do
f[i,j]:=max(f[i,j],f[i-1,l]*sum[l+1,j]);
writeln(f[k,n]);
end.



  • 卡卡卡罗特
  • 普及一等
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不帮你于心不忍哪


  • 卡卡卡罗特
  • 普及一等
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用动态规划求解
设数字串为a1a2a3……an
K=1时,最大值=max{a1 × a2a3…… an, a1 a2 × a3 …… an, ……,a1 a2 a3 …… an-1×an}
此时和穷举法相同。
K=2时,最大值=max{a1 a2a3…… × an-1 × an, a1 a2 a3 …… an-3 × an-2 an-1 × an, ……,a1 × a2 × a3 …… an}



  • 卡卡卡罗特
  • 普及一等
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
引入记号f(i,j,s)表示ai 到aj,s个乘号取得的最大值,g(i,j)表示从ai到aj的数字列,则上面的公式可以表示为:
K=1时,f(1,n,1)=max{g(1,1)*g(2,n),g(1,2)*g(3,n),…,g(1,n-1)*g(n,n)}
K=2时,f(1,n,2)=max{f(1,n-1,1)*g(n,n),f(1,n-2,1)*g(n-1,n),…,f(1,2,1)*g(3,n)}
一般地:f(1,n,k)=max{f(1,n-1,k-1)*g(n,n),f(1,n-2,k-1)*g(n-1,n),…,f(1,k,k-1)*g(k+1,n)}



2025-11-01 18:37:22
广告
不感兴趣
开通SVIP免广告
  • X_striker
  • 省选酱油
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一道区间DP,先是读入数据,方法很多,我用的字符串。
积最大,也就是 【在这个字串中加入一些乘号,使积取得最大】。
那么阶段就出来了,如果串中有 i 个乘号,那么再加一个乘号的值只与只有 i 个乘号的时候有关。
也就是,f[i,j],表示在 前 j 的字串里加入 i 个乘号可以取得的最大值



  • 卡卡卡罗特
  • 普及一等
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
var a:array[1..50] of integer;
g:array[0..50,1..100] of int64;
n,k,i,j,p,s:longint;
max,m:int64;
ch:char;
begin
assign(input,'dtest3.in'); reset(input);
assign(output,'dtest3.out'); rewrite(output);
readln(n,k);
for i:=1 to n do begin read(ch); a[i]:=ord(ch)-48; end;
m:=0;
for i:=1 to n do
begin
m:=m*10+a[i];
g[0,i]:=m;
end;
for i:=1 to k do
for j:=i+1 to n do
begin
max:=0;
for p:=i to j-1 do
begin
m:=0;
for s:=p+1 to j do m:=m*10+a[s];
if m*g[i-1,p]>max then max:=m*g[i-1,p];
end;
g[i,j]:=max;
end;
write(g[k,n]);
close(output); close(output);
end.



  • X_striker
  • 省选酱油
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
状态就是当前的乘积,决策,就是该把乘号放在哪个位置。
因为字串长为 J ,所以可以放在 1和2之间,2和3之间。。。J-1和J 之间。
则,状态转移方程就是 F[I,J]:=MAX(F[I,J],F[I-1,K]*SUM[K+1,J) (1<=k<j)


  • X_striker
  • 省选酱油
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
其中,SUM数组是一个递推的初始化,SUM【I,J】 表示在字串中,由i 到 j 的数字,
如sum【1,1】:=a[i];
sum[1,2]:=sum[1,1]*10+a[2]....
于是,
for i:=1 to n-1 do
for j:=i+1 to n do
sum[i,j]:=sum[i,j-1]*10+a[j];
就可以求出SUM了。也就时任意两个数之间的数值。



  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
多谢神犇~~~~先感谢再看~~


  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
多谢神犇~~~~先感谢再看~~


2025-11-01 18:31:22
广告
不感兴趣
开通SVIP免广告
  • hzhuangbiyou
  • 提高一等
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
麻烦神犇~~可不可以把转移方程解释一下?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 18回复贴,共2页
  • ,跳到 页  
<<返回noip吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示