因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积

那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出

f[i][r] = max(f[j - 1][r - 1], num(j, i));

num(j, i)表示第j位到第i位的数,j < i

然后注意要用高精度来计算。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 112;
struct node
{
int len, s[MAXN];
node() { len = 0; memset(s, 0, sizeof(s)); }
};
int n, k, a[MAXN];
node f[MAXN][10], sum[MAXN][MAXN]; node cut(int x, int y)
{
node ret;
for(int i = y; i >= x; i--)
ret.s[++ret.len] = a[i];
return ret;
} node cheng(node a, node b)
{
node ret;
REP(i, 1, a.len + 1)
REP(j, 1, b.len + 1)
{
ret.s[i + j - 1] += a.s[i] * b.s[j];
ret.s[i + j] += ret.s[i + j - 1] / 10;
ret.s[i + j - 1] %= 10;
}
int& i = ret.len = a.len + b.len - 1;
while(ret.s[i+1] > 0)
{
i++;
ret.s[i + 1] += ret.s[i] / 10;
ret.s[i] %= 10;
}
while(!ret.s[i] && i > 1) i--;
return ret;
} node max_node(node a, node b)
{
if(a.len > b.len) return a;
else if(a.len < b.len) return b;
else
{
for(int i = a.len; i >= 1; i--)
{
if(a.s[i] > b.s[i]) return a;
else if(a.s[i] < b.s[i]) return b;
}
}
return a;
} int main()
{
scanf("%d%d", &n, &k);
REP(i, 1, n + 1) scanf("%1d", &a[i]), f[i][0] = cut(1, i);
REP(i, 1, n + 1)
REP(j, i, n + 1)
sum[i][j] = cut(i, j);
REP(r, 1, k + 1) //乘号的循环在外面
REP(i, 1, n + 1)
for(int j = i; j > 1; j--) //这里大于1,边界要注意一下
f[i][r] = max_node(f[i][r], cheng(f[j - 1][r - 1], sum[j][i]));
node t = f[n][k];
for(int i = t.len; i >= 1; i--) printf("%d", t.s[i]);
puts("");
return 0;
}

最新文章

  1. OpenCV 轮廓基本特征
  2. cocoapods使用一直Updating local specs repositories的解决方案
  3. CSS之transition过渡练习
  4. html5新增及删除标签
  5. bootstrap模态框和select2合用时input无法获取焦点
  6. C#按回车Enter使输入焦点自动跳到下一个TextBox的方法收集
  7. 浪潮之巅IT那点事之一——AT&amp;T的兴衰
  8. 一大早居然有骗子还是傻子,真是莫名其妙的,QQ1913522040,一看就是刚申请不久的
  9. css选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先
  10. NSFileHandle 、 沙箱机制 、 属性列表
  11. 《jave程序设计》第一周学习总结
  12. Twitter 登录和分享
  13. Objective-C开发图书推荐
  14. 命令格式 kill -3 pid
  15. 疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现
  16. Linux格式化分区报错Could not start /dev/sda No such file or directory 解决办法
  17. Windows 8.1 explorer.exe总是崩溃的解决办法
  18. 洛谷 P1231 教辅的组成
  19. web框架之Flask
  20. centos系统java后台运行(xshll关掉不至于jar程序结束)

热门文章

  1. jQuery EasyUI 右键菜单--关闭标签/选项卡
  2. vmware workstation pro 14 虚拟机无法开启、黑屏的解决方案汇总
  3. AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
  4. 乌班图 之 设置镜像服务器 、设置屏幕分辨率QAQ
  5. Linux部署之批量自动安装系统之DHCP篇
  6. Linux 安装软件的几种方式
  7. C# 分隔字符串成为字符串数组的方法(保留分隔符)
  8. TP框架传值
  9. javascript中实现继承的几种方式
  10. 微信小程序优化