#include <iostream> #include <algorithm> using namespace std; /*********全局变量*********/ unsigned long long int dp[7][42]={0}; char number[42]={0}; int N,K; int A[42]={0}; /*********转换函数*********/ unsigned long long int transform(int i,int j){ //输出i到j位的数 long long int transformation=0; for(;i<=j;++i){ transformation=transformation*10+A[i]; } return transformation; } /*********动态规划*********/ void DP(void){ unsigned long long int temp=0; for(int i=1;i<=K;++i){ for(int j=1;j<=N;++j){ temp=0; for(int k=i;k<j;++k){ temp=max(temp,dp[i-1][k]*transform(k+1,j)); //状态转移方程 } dp[i][j]=temp; } } } /*********主函数*********/ int main() { cin>>N>>K; cin>>number; for(int i=0,j=1;i<N;++i,++j){ A[j]=number[i]-‘0‘; dp[0][j]=dp[0][j-1]*10+A[j]; //为状态转移方程中的dp[i-1][k]做准备 } DP(); cout<<dp[K][N]; return 0; }
原文:https://www.cnblogs.com/futu-/p/12306372.html