数字串分割为m个部分,求乘积最大?
例如有一个数字串:312, 当 N=3,K=1 时会有以下两种分法:
3 * 12
31*2
这时,符合题目要求的结果是: 31 *2
转移方程 在注释里,不解释
以下代码只有80分,AC需要换成高精度(笔者大概是没学过的
#include <iostream>
#include <cstring>
using namespace std ;
const int N=50;
#define ll __int128
template <typename _Tp> void read(_Tp &x) {
char ch;bool flag=0;x=0;
while(ch=getchar(),!isdigit(ch)) if(ch=='-')flag=1;
while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();
if(flag) x=-x;
}
void print(ll x) {
if(x<0) {x=-x;putchar('-');}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int a[N];
ll n,m,num[N][N],f[N][9];
// f[i][j] =max{ f[k][j-1]*num(k,i) }
signed main(){
ll i,j,k,t;
read(n); read(m);
char ch;
for(i=1;i<=n;i++) cin>>ch,a[i]=ch-'0';
for(i=1;i<=n;i++)
for(j=1;j<=i;j++){
t=0;
for(k=j;k<=i;k++) t=t*10+a[k];
num[j][i]=t;
}
for(i=1;i<=n;i++) f[i][0]=num[1][i];
for(i=1;i<=n;i++)
for(j=1;j<=m&&j<i;j++)
for(k=1;k<=i;k++)
f[i][j] =max(f[i][j],f[k-1][j-1]*num[k][i]);
print(f[n][m]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!