vijos p1347(最大乘积(整数划分?))(25—100分)
跟数的划分有些类似,递归+记忆化搜索,
做过数的划分的人做这道题目应该不是很难。
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分)相关推荐
- CCF202109-2 非零段划分(100分)【序列处理】
试题编号: 202109-2 试题名称: 非零段划分 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 A1,A2,-,An是一个由 n 个自然数(非负整数)组成的数组.我们称其 ...
- CCF-CSP 第二题70分->100分攻略【202012-202206】 C++/C
前言 本篇文章着重介绍CSP认证第二题常见考点,以[202012-202206]6次真题的第二题为例,旨在帮助你我从70分(暴力模拟,运行超时)到100分(利用特定技巧,降低时间复杂度). 此文参考了 ...
- bzoj 1263: [SCOI2006]整数划分
1263: [SCOI2006]整数划分 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1449 Solved: 736 [Submit][Stat ...
- 51nod 1201:整数划分 超级好的DP题目
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...
- NYOJ176 整数划分(二)
整数划分(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 1 ...
- NYOJ-571 整数划分(三)
此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...
- ACM 整数划分(四)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到 ...
- 整数划分 --- 一个老生长谈的问题 动态规划
整数划分 --- 一个老生长谈的问题: 1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数. 2. ...
- 整数划分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 ...
最新文章
- Android广播机制
- latex 下划线_备战美赛!论文写作必备Latex排版教程之单词间隔、标题及交叉引用...
- C语言二叉树的逆向有序遍历(附完整源码)
- 《零基础看得懂的C++入门教程 》——(8)搞定二维数组与循环嵌套
- Pandas知识点-equals()与==的区别
- awstats 日志分析
- 数据库原理及应用教程(第4版|微课版)陈志泊-第一章习题
- LoadRunner11 下载 及 license注册
- 项目管理的49个过程整理
- Hive调优之 union all 效率低的问题解决
- java flink(二十七) 实战之电商 订单超时取消报警计算 CEP与ProcessFunction 对比
- 【学术】英文词汇和句型结构收集
- 51nod2384 事后诸葛亮
- 织梦dedecms TAG标签调用汇总(史上最全)
- 云计算板块-云计算基础介绍
- oracle 输出全角空格,mac系统中如何切换全角半角?苹果电脑输入法全角半角切换快捷键介绍...
- python cmd以管理员执行指令(网卡切断与打开)
- ChatGPT简要解读(一) - 原理分析与性能提升篇
- Mac上抓住每一次灵感迸发的App
- 2022CVPR云分享 | 清华大学四位讲者带你玩转计算机视觉