乘积最大

来源:互联网 发布:极品飞车ola车数据 编辑:程序博客网 时间:2024/05/29 11:52

http://codevs.cn/problem/1017/
这个题,自己觉得还是比较难理解的。一个数字可以将它分为两部分,将前一部分分开然后相乘再乘以后面的部分,至于以前的部分怎么分,再继续将前面的部分分成两个部分。先可以将数字分成两份计算,然后三份~~~~(不是故意卖萌,时突然发现省略号不会打)

#include<iostream>#include<stdio.h>#include<cmath>#include<algorithm>using namespace std;char shuru[45];long long getnun(int a, int b){    long long shu = 0;    for (int i = a; i <=b; i++)    {        shu = shu * 10 + shuru[i] - '0';    }    return shu;}int main(){    int n, k;    long long dp[45][10] = { 0 };    cin >> n >> k;    cin >> shuru;    for (int i = 0; i < n; i++)    {        dp[i][0] = getnun(0,i);    }    for (int i = 0; i <n; i++)    {        for (int j = 1; j <= k; j++)        {            for (int k = 0; k <i; k++)            {                dp[i][j]=max(dp[i][j],dp[k][j-1]*getnun(k+1,i));            }        }    }    cout << dp[n - 1][k] << endl;    system("pause");    return 0;}
0 0
原创粉丝点击