题目
- 题目:给出一个长度为n的数.问:如何在数中添加k个乘号,使乘积最大?输出这个最大值.
- 输入格式:
- 第一行,输入两个数n,k,中间有空格隔开.
- 第二行,输入这个长度为n的数.
- 输出格式:仅有一行,输出最大值.
- 例子:
- input:
- 4 2
- 1231
- output:
- 62
分析
- 我们用
f[i][j][k]
来表示数的每一个数字组成的区间[i,j]
中加入k
个乘号的最大乘积,定义一个指针u
来枚举区间[i,j)
中的每一个位置,则动态转移方程为f[i][j][k]=max(f[i][j][k],f[i][u][k-1]*f[u+1][j][0])
,则我们要求的最大值,就保存在f[0][n-1][k]
中.
程序
#include<cstdio>
#include<iostream>