题目描述:

样例:

实现解释:

和字符串处理结合的动态规划,个人认为比较难分析出状态转移方程,虽然懂了之后挺好理解的

知识点:

动态规划,字符串转数字

题目分析:

首先按照最基础:依据题意设计原始dp数组,这里根据描可知有三个数需要考虑:数字串开始,数字串结尾和之间插入的乘号数量,因此基础dp[i][j][k],分别为开始,结束脚标和乘号数。

然后推导:考虑到添加乘号,为了使状态转移方程简单,最后固定位置,因此可以考虑每次都在最后插入乘号,插入乘号的位置便可倒序确定。此时数字串的开始位置便可固定为0(因为添加乘号都在最后添加,因此可以不必考虑开始),则有dp[i][j],分别为结束脚标和乘号数量。

得出状态转移方程:乘号在最后插入,插入之间有j-1个乘号,前面有i+1个数字,因此插入乘号的位置可从j+1一直到i-1脚标的数字后(保证能放下j个乘号),则需要比较的就是dp[i][j]和dp[i-k][j-1]*getNum(i-k+1,i);k为插入乘号后最后一个数字的位数(根据脚标范围而定),前者即插入乘号前面的最大值,后者即乘号后面的值,循环找最大既是dp[i][j]的最大值。

注:初始化需要对插入0个乘号时dp[i][0]进行特殊处理,其他均为0

难点:

状态转移方程的实现,状态转移时数字字符串脚标的确定

完整代码:

#include<iostream>
#include<cstring>
#include<sstream>
using namespace std;
long long dp[][];
string num;
long long getNum(int i,int j)
{
string temp = num.substr(i,j-i+);
//基于开始脚标和长度截取字符串
stringstream ss;
long long strnum;//由于最大18位,因此可以直接转化
ss << temp;//传入流
ss >> strnum;//流导出自动转化数字
return strnum;
}
int main()
{
ios::sync_with_stdio(false);
int n,length,minc,maxl;
long long now;
while(cin >> n)
{
cin >> num;
length = num.length();
memset(dp,,sizeof(dp));
//0个乘号时赋初值,这里用dp[i-1][0]*10+num[i]-'0'的方法更快些
for(int i = ;i<length;i++) dp[i][] = getNum(,i);
//0的已经处理,从1开始
for(int i = ;i<length;i++)//当前到达的字符串脚标为i
{
minc = min(n,i);//最多可放的乘号数
for(int j = ;j<=minc;j++)//0~i中插入j个乘号
{
maxl = i-j+;//插入的极限位置界定,依据i>=k+j-1得出
for(int k = ;k<=maxl;k++)//k为插入称号后最后一个数字的位数
{
//乘号的插入位置为即i-k脚标的数字后
//因此获取数字时i-k+1即最后数字的开始脚标
now = dp[i-k][j-]*getNum(i-k+,i);//加快计算
if(now > dp[i][j])
{
dp[i][j] = now;
}
}
}
}
cout << dp[num.length()-][n] << '\n';
}
return ;
}

题解:2018级算法第四次上机 C4-最小乘法的更多相关文章

  1. 题解:2018级算法第四次上机 C4-商人卖鱼

    题目描述: 样例: 实现解释: 需要简单分析的贪心题 知识点: 贪心,自定义排序,提前存储 题目分析: 卖鱼,鱼卖出去需要时间,鱼没被卖出去之前需要吃饲料 则有,如果卖a鱼的话b鱼会吃饲料c份,而卖b ...

  2. 题解:2018级算法第五次上机 C5-图2

    题目描述: 样例: 实现解释: 所有结点对最短路径的板子题 知识点: 寻找所有结点对最短路径,动态规划 坑点: 无坑,注意建边即可 使用的算法为floyd算法 按照程序顺序解释如下: 首先建图,以邻接 ...

  3. 题解:2018级算法第六次上机 C6-不Nan的过河

    题目描述: 样例: 实现解释: 一道因为没排序做了一个小时没做出来的二分答案模板题(手动呲牙) 知识点: 二分答案,最大值最小化 坑点: 排序,judge(mid)函数内计数的实现 其实从最长一步的最 ...

  4. 题解:2018级算法第六次上机 C6-危机合约

    题目描述 样例: 实现解释: 没想到你也是个刀客塔之二维DP 知识点: 动态规划,多条流水线调度?可以看做一种流水线调度 坑点: 输入内容的调整(*的特殊判定),开头结尾的调整策略 从题意可知,要做的 ...

  5. 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰

    题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...

  6. 2016级算法第四次上机-E.Bamboo and the Ancient Spell

    Bamboo and the Ancient Spell 分析 可能英文读题难度比较大,但是只要看到全大写的 "THE LONGEST COMMON SUBSEQUENCE !"应 ...

  7. 2016级算法第四次上机-F.AlvinZH的最“长”公共子序列

    940 AlvinZH的最"长"公共子序列 思路 DP,难题. \(dp[i][j]\) :记录A的前i个字符与B的前j个字符变成相同需要的最小操作数. 初始化:dp[i][0] ...

  8. 2016级算法第四次上机-D.AlvinZH的1021实验plus

    978 AlvinZH的1021实验plus 思路 贪心,中等题. 使用miss变量表示未覆盖的最小数字,初始值为1. 初始覆盖区间为[1,miss),目标是覆盖[1,m],即miss需要大于m. 需 ...

  9. 2016级算法第四次上机-C.AlvinZH的1021实验

    975 AlvinZH的1021实验 思路 贪心,简单题. 题目已经说明有且只有一种方法表示所求数,简单列举几项可以发现只由前i个砝码会可以表示[1,∑Wi]的所有数的.先找到最大需要的砝码Wi,问题 ...

随机推荐

  1. [Web][学习随笔]Session&cookie

    Session 从登录建立连接到退出就是一次会话.Session数据就会在会话期间用户存在服务器端的数据.这样,当用户在Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会 ...

  2. MyBatis运行流程及入门第一个程序

    1. mybatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  3. 【JUC系列】01、之大话并发

    学习方法 学习技术的方法都很类似,大部分都有着类似的步骤: 场景 需求 解决方案 应用 原理 并发的目的 充分利用CPU 和 I/O资源 提高效率 并发的维度 分工 同步/协作 互斥 分工 线程池 f ...

  4. ORM框架 Mybatis、Hibernate、Spring Data JPA之到底该用谁,谁更牛*

    在持久层框架中无可厚非的就是mybatis了,但是也会经常被人问到为啥要用mybatis,为啥不用hibernate,jpa.很多人各级都是地铁爷爷看手机的表情,似乎从来没想过这个问题.“公司叫用我就 ...

  5. OSI七层模型工作过程&&输入URL浏览器的工作过程(超详细!!)

    从以下10个方面深入理解输入URL后整个模型以及浏览器的工作流程! 目录 1.HTTP 2.DNS 3.协议栈 4.TCP 5.IP 6.MAC 7.网卡 8.交换机 9.路由器 10.服务器与客户端 ...

  6. Pikachu的暴力破解演示-----基于表单的暴力破解

    1 首先打开XAMMP与burpsuite 2 打开游览器输入127.0.0.1:88进入pikachu,(由于我的端口有80改成88所以输入127.0.0.1:88要是没有更改80只需要输入127. ...

  7. AWS 错误标记3

    1. What is the average queue length recommended by AWS to achieve a lower latency for the 200 PIOPS ...

  8. 黑马程序员spring data jpa 2019年第一版本

    第一步首先创建一个maven工程,导入对于的pom依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  9. Spring mvc 面试

    Spring工作原理及其作用 1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作. 2.DispatcherSer ...

  10. Java 将PDF/XPS转为Word/html /SVG/PS/PCL/PNG、PDF和XPS互转(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了接口PdfConvertApi通过convert()方法将PDF文档以及XPS文档转为指定文档格式,如转PDF为Word(支持Docx.Doc). ...