洛谷P1018|洛谷P1018 乘积最大两种做法
目前整理了两种做法
方法一:
设a为输入的字符串,num【i】【j】表示字符串中从下标为i到j(故从0开始)的一串数字。那么可以得到
for(int i=0;
i
这是一个递推,第一行是设置边界,递推关系式即num[i][j]=num[i][j-1]*10+a[j]-'0';
设f【i】【j】表示在0到i间加入i个乘号的最大乘积,则状态转移方程为:
for(int k=1;
k<=x;
k++)
for(int i=k;
i
边界设置如下:
for(int i=0;
i
#include
#include
这种做法来自sumyt,原文:
题解 P1018 【乘积最大】 - sunyt 的博客 - 洛谷博客
https://www.luogu.org/blog/user17407/solution-p1018
void dfs(三个已插入的乘号个数,当前乘积,上一个插入的乘号的位置)中
第三个形参的说明:比如在1231中插了一个变成:1*231,那么该形参表示的是“*”左边的1的位置
for(int j=last+1;
jmul+=a[j];
mul*=10;
}
mul+=a[i];
mul表示上一乘号到刚插入的这个乘号之间的数字。
好啦解释(ban yun)完毕。
【洛谷P1018|洛谷P1018 乘积最大两种做法】转载于:https://www.cnblogs.com/Neptune0/p/11379202.html
推荐阅读
- 牛客 C. 子段乘积(线段树)
- JZ-051-构建乘积数组
- C++ 实现最小公倍数
- 洛谷 P5056 【模板】插头dp
- 数论|如何证明最大公约数乘以最小公倍数就是这两个数的乘积
- C++|【暖*墟】 #洛谷省选网课# 8.1数论进阶
- 牛客寒假训练营|牛客寒假训练营 4 C 子段乘积
- 洛谷|洛谷 P1481 魔族密码
- SP694 DISUBSTR - Distinct Substrings(洛谷 字典树)
- KD-Tree|【NOI2019】【LOJ3259】【洛谷P5471】弹跳(K-D Tree)(最短路)