谷歌网站的主要内容,自动做网站,十大营销案例分析,怎样创建个人购物网站题目描述
给一段数列#xff0c;用k个乘号分开#xff0c;求所得最大值 n10!
解析
这样就不用写高精啦 枚举第一个乘号的位置递归记忆化搜索即可
问题#xff01;
一开始边界条件写了一个这个#xff1a;
if(n-stk) return -2e15;这样使这样的情况强制非法 但…题目描述
给一段数列用k个乘号分开求所得最大值 n10!
解析
这样就不用写高精啦 枚举第一个乘号的位置递归记忆化搜索即可
问题
一开始边界条件写了一个这个
if(n-stk) return -2e15;这样使这样的情况强制非法 但是这样返回一个极大值再乘上一个大数就会爆ll 其实返回0就行了
代码
#includebits/stdc.h
using namespace std;
#define ll long long
int n,m;
const int N150;
ll dp[N][N];
ll a[N];
char s[N];
ll zhi(int x,int y){ll ans0;for(int ix;iy;i){ans*10;ansa[i];}return ans;
}
ll find(int st,int k){if(dp[st][k]) return dp[st][k];if(n-stk) return 0;if(k0) return zhi(st,n);ll ans0;for(int ist1;in;i){ansmax(ans,(ll)find(i,k-1)*zhi(st,i-1));
// printf(a%lld b%lld\n,find(i,k-1),zhi(st,i-1));}
// printf(st%d k%d ans%lld\n,st,k,ans);return dp[st][k]ans;
}
int main(){scanf(%d%d\n,n,m);scanf( %s,s1);for(int i1;in;i) a[i]s[i]-0;printf(%lld\n,find(1,m));
}
/*
9 4
321044105
*/