原题

题目描述 Description

     小浣熊松松来到文具店,选择了K支自己喜欢的水彩笔,并抄下了它们的价格。可是到结算时,他发现自己抄价格时抄得太密集,以至于所有价格连成了一个数字串(你可以假设价格都是正整数)。老板想和松松开个玩笑,于是对他说:“你可以把这个数字串分成K段,代表这K支笔的价格,然后把他们加起来,就是你要付给我的钱了。”当然,松松想尽可能省下钱去买《算法导论》,所以请你来帮忙算算,他最少需要付多少钱。

输入描述 Input Description

第一行包含一个整数N,代表松松抄下来的数字串。

第二行包含一个整数K,代表松松买了K支水彩笔。

输出描述 Output Description

输出仅一行,为松松买这些笔最少花的钱。

样例输入 Sample Input

79846

3

样例输出 Sample Output

133

数据范围及提示 Data Size & Hint

对于20%的数据,K=1;

对于100%的数据,数字串长度不超过8,K<=数字串长度。

由于是松松来划分,因此可以出现有前导0的价格,或者价格就是0。

网址:http://codevs.cn/problem/3415/

题意

给一串数字,将它分为K部分,使得这K部分加起来的和最小。

题解

这道题数据挺水,dfs和递归貌似也能过,但Code给它的标签是DP,本人也就跟着写了一下DP。

首先定义一个二维数组F,Fi,j表示数字串前i位分成j部分时的最优解。

下面给出DP状态转移方程,f[i,j]=min(f[i,j],f[k,j-1]+p(copy(s,k+1,i-k)))

具体解释:

定义一个函数p(s),表示将字符串s转为数字(原先读入的为字符串)。

接下来三重循环:

for i:=1 to length(s) do//枚举字符串长度

for j:=1 to min(n,i) do begin//枚举分的份数,但j不能大于i,因为1个数不可能被分成2份

if j=1 then f[i,j]:=copy(s,1,i) else//如果份数为1则还是它本身

for k:=1 to i-1 do f[i,j]:=min(f[i,j],f[k,j-1]+p(copy(s,k+1,i-k)));end;//在[1,i)的半开闭区间中不断更新答案找出最优解

OK下面pia代码:

 uses math;
var f:array[..,..] of int64;
var n,l,i,j,k:longint;
var s:string;
function p(s:string):longint;
var num,i:longint;
begin
num:=;
for i:= to length(s) do num:=num*+ord(s[i])-;
exit(num);
end;
begin
readln(s);readln(n);
l:=length(s);
for i:= to l do for j:= to n do f[i,j]:=maxlongint;
for i:= to l do
for j:= to min(i,n) do
begin
if j= then f[i,j]:=p(copy(s,,i)) else
for k:= to i- do f[i,j]:=min(f[i,j],f[k,j-]+p(copy(s,k+,i-k)));
end;
writeln(f[l,n]);
end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

CodeVS 3415-最小和的更多相关文章

  1. 【动态规划】【记忆化搜索】CODEVS 3415 最小和 CodeVS原创

    f(l,r,i)表示第i段截第l位到第r位时,当前已经得到的价格最小值,可以很显然地发现,这个是没有后效性的,因为对之后截得的段都不造成影响. 注意水彩笔数=1的特判. 递归枚举当前段的r求解(∵l是 ...

  2. codevs 1245 最小的N个和

    1245 最小的N个和 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N ...

  3. codevs 2796 最小完全图

    2796 最小完全图 http://codevs.cn/problem/2796/  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 若一个图的每一对不 ...

  4. CODEVS 1245 最小的N个和 堆+排序

    原题链接 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求 ...

  5. Codevs 1904 最小路径覆盖问题

    1904 最小路径覆盖问题 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 大师 Master 传送门 题目描述 Description 给定有向图G=(V,E).设P 是G 的一个 ...

  6. codevs 3278 最小m 段和问题

    时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 给定 n 个整数(不一定是正整数)组成的序列,现在要求将序列分割为 m 段,每段 ...

  7. dp练习(7)—— 最小和

    3415 最小和 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 小浣熊松松来到文具店, ...

  8. 【动态规划】【记忆化搜索】1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    跟CODEVS 3415没有什么区别,也不用高精度. http://www.cnblogs.com/autsky-jadek/p/4055184.html #include<cstdio> ...

  9. 求最大边/最小边的比值最小的路径 codevs 1001 舒适的路线

    codevs 1001 舒适的路线 2006年  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description Z小镇是一个景色宜人 ...

  10. [Codevs 1421]秋静叶&秋穣子(最大-最小博弈)

    题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的 ...

随机推荐

  1. 通过localstorage和cookie实现记录文章的功能

    我们在做页面的时候,会考虑记录用户曾经看过的文章的功能,并记录下来在页面中显示!但是在IE低版本的下是不支持localstorage的功能,只能采用cookie来代替本地存储的功能!实现的方法如下! ...

  2. PhotoShop基本工具 -- 移动工具

    艺术或学习的东西吧, 爱好   比学编程还难 PS版本号 : PhotoShop CS6 1. 移动工具 (1) 工具栏和属性栏 工具栏 和 属性栏 : 左側的是工具栏, 每选中一个工具, 在菜单条的 ...

  3. form-validation--表单验证插件

    基于jquery的validationEngine表单验证插件,根据官网提示,该插件支持IE6-8,Chrome浏览器,火狐,Safari,Opera 10,但由于有使用到了css3的阴影和圆角样式, ...

  4. [转]C# and the using Statement in 3 seconds and a bug in Reflector

    Using() Statement in 3 seconds and a bug in Reflector The boring, known accross the board definition ...

  5. 控制台命令行API

    js调试系列: 控制台命令行API   上次初步介绍了什么是控制台<js调试系列: 初识控制台>,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么 ...

  6. 【转载】matlab如何判断一个点是否在多面体内

    转载自:http://www.52souji.net/point-within-a-polyhedron/ 我遇到的一个实际问题是:要在空位区域随机放置一定数量的原子,这些原子在空位区域任何一处存在的 ...

  7. Sqoop自定义多字节列分隔符

    Sqoop提供的--fields-terminated-by选项可以支持指定自定义的分隔符,但是它只支持单字节的分隔符,对于我们特殊的需求:希望使用双字节的“|!”,默认的是不支持的. Sqoop在进 ...

  8. Go语言搭建自己的博客

    我是如何用Go语言搭建自己的博客的   前言: 话说,已经很久没有在博客园更新博客了,之前写的关于go语言的系列学习文章<让我们一起Go>也由于种种原因一度中断.但是,正如我之前在文章中所 ...

  9. iOS基础 - Modal制作控制器

    1.modal 1.modal推出控制器的代码 2.modal关闭当前控制器的代码 3.modal推出的动画效果 4.modal在ipad中应用 2.如何给控制器加上导航栏 3.modal和导航控制器 ...

  10. Visual Stuido也有非常多的快捷键

    最近看到很多同事用 VI 来开发Ruby,Python脚本. 编辑代码全部用的是快捷键,效率很高. 其实Visual Stuido也有非常多的快捷键,熟练运用后,能大大提高工作效率. 本文介绍一些最常 ...