跟数的划分有些类似,递归+记忆化搜索,

做过数的划分的人做这道题目应该不是很难。

http://www.cnblogs.com/zyxx233/archive/2012/12/08/2809187.html 这是数的划分题解

同样的,我还是以haha来作为函数.....(个人癖好)

状态:haha(s,t,k).

意思是从s到t的数段中加入k 个乘号所能得到的最大值。

所以 ans:=haha(1,n,k).

状态的转移:

for i:=1 to t-k-s+1 do

begin

val(copy(st,s,i),m);

if ha[s+i,t,k-1]<>0 then

haha:=max(haha,m*ha[s+i,t,k-1])

else haha:=max(haha,m*haha(s+i,t,k-1));

end;

当k=0时 haha即为该数段的值。

优化:同数的划分,递归的缺点就是有很多重复的计算,所以我们可以另开一个三维数组来记录每一次函数的值,如果再需计算这个函数,我们先检查这个函数是否已经在数组里记录过了,如

果已经记录,直接调用数组,否则再计算函数。

 1 program p1347; uses math;2 var3         i,j,k,l,m,n,ans:longint;4         st:string;5         ha:array[0..60,0..60,0..6]of int64;6 function haha(s,t,k:longint):int64;7 var8         m,n:int64;9         i,j:longint;
10 begin
11         haha:=0;
12         if k<=0 then
13                 begin
14                 val(copy(st,s,t-s+1),m);
15                 haha:=m;
16                 end
17         //else if k<0 then exit(0)
18         else if k>0 then
19         for i:=1 to t-k-s+1 do
20                 begin
21                 val(copy(st,s,i),m);
22                 if ha[s+i,t,k-1]<>0 then
23                 haha:=max(haha,m*ha[s+i,t,k-1])
24                 else haha:=max(haha,m*haha(s+i,t,k-1));
25                 end;
26         ha[s,t,k]:=haha;
27 end;
28 begin
29         assign(input,'p1347.in');
30         reset(input);
31         readln(n,k);
32         readln(st);
33         ans:=haha(1,n,k);
34         write(ans);
35         close(input);
36 end.              

今天的题解终于写完了!

转载于:https://www.cnblogs.com/zyxx233/archive/2012/12/08/2809245.html

vijos p1347(最大乘积(整数划分?))(25—100分)相关推荐

  1. CCF202109-2 非零段划分(100分)【序列处理】

    试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...

  2. CCF-CSP 第二题70分->100分攻略【202012-202206】 C++/C

    前言 本篇文章着重介绍CSP认证第二题常见考点,以[202012-202206]6次真题的第二题为例,旨在帮助你我从70分(暴力模拟,运行超时)到100分(利用特定技巧,降低时间复杂度). 此文参考了 ...

  3. bzoj 1263: [SCOI2006]整数划分

    1263: [SCOI2006]整数划分 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1449  Solved: 736 [Submit][Stat ...

  4. 51nod 1201:整数划分 超级好的DP题目

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...

  5. NYOJ176 整数划分(二)

    整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 1 ...

  6. NYOJ-571 整数划分(三)

    此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...

  7. ACM 整数划分(四)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到 ...

  8. 整数划分 --- 一个老生长谈的问题 动态规划

    整数划分 --- 一个老生长谈的问题: 1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数. 2. ...

  9. 整数划分c语言程序递归,递归整数划分

    递归实现整数划分 目录 递归实现整数划分 1.原理 2.Python实现 3.C实现 1.原理 拿6为例,可划分为: 6 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2 ...

最新文章

  1. Android广播机制
  2. latex 下划线_备战美赛!论文写作必备Latex排版教程之单词间隔、标题及交叉引用...
  3. C语言二叉树的逆向有序遍历(附完整源码)
  4. 《零基础看得懂的C++入门教程 》——(8)搞定二维数组与循环嵌套
  5. Pandas知识点-equals()与==的区别
  6. awstats 日志分析
  7. 数据库原理及应用教程(第4版|微课版)陈志泊-第一章习题
  8. LoadRunner11 下载 及 license注册
  9. 项目管理的49个过程整理
  10. Hive调优之 union all 效率低的问题解决
  11. java flink(二十七) 实战之电商 订单超时取消报警计算 CEP与ProcessFunction 对比
  12. 【学术】英文词汇和句型结构收集
  13. 51nod2384 事后诸葛亮
  14. 织梦dedecms TAG标签调用汇总(史上最全)
  15. 云计算板块-云计算基础介绍
  16. oracle 输出全角空格,mac系统中如何切换全角半角?苹果电脑输入法全角半角切换快捷键介绍...
  17. python cmd以管理员执行指令(网卡切断与打开)
  18. ChatGPT简要解读(一) - 原理分析与性能提升篇
  19. Mac上抓住每一次灵感迸发的App
  20. 2022CVPR云分享 | 清华大学四位讲者带你玩转计算机视觉

热门文章

  1. 盘点9个你可能不会用的JS技巧
  2. 程序员职场:拥有一个学位将会在你的职业生涯中更加顺利!
  3. 提高程序员工作效率的11个技巧
  4. linux 信号和信号量编程
  5. Could not autowire. No beans of 'JavaMailSender' type found..md
  6. java中main函数的args参数
  7. 深入浅出之正则表达式(二)
  8. 安装sql2012 需要安装net3.5 没有的话 安装不成功
  9. 拉美光伏新兴市场热潮将至
  10. 数据库备份需要注意的