蓝桥杯 ALGO-17 乘积最大

#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;
}

猜你喜欢

转载自www.cnblogs.com/futu-/p/12306372.html