1 条题解
-
0Guest LV 0 MOD
-
0
#include<bits/stdc++.h> #define ll long long using namespace std; ll t,n,m,a[20],f[20][20];//前i个数划分成j段的最大值 ll sum(ll l,ll r) { ll ans=0; for(ll i=l; i<=r; i++) { ans=ans*10+a[i]; } return ans; } int main() { ios::sync_with_stdio(false); cin>>t; while(t--) { memset(a,0,sizeof(a)); memset(f,0,sizeof(f)); string s; cin>>s>>m;//以字符串的形式读入数据 n=s.size(); for(ll i=0; i<n; i++) { a[i+1]=s[i]-'0';//分解出每个位置的数字 } for(ll i=1; i<=n; i++) { f[i][1]=sum(1,i);//状态初值,前i个数字不分段 } for(ll i=1; i<=n; i++) { for(ll j=2; j<=m&&j<=i; j++) { for(ll k=j-1; k<i; k++) { f[i][j]=max(f[i][j],f[k][j-1]*sum(k+1,i)); } } } cout<<f[n][m]<<endl; } return 0; }
- 1