南阳理工OJ_题目746 整数划分(四)

来源:互联网 发布:下载阿里旺旺淘宝网 编辑:程序博客网 时间:2024/06/06 08:43
//dp问题, 10^19, long long存储结果#include <iostream>#include <string.h>using namespace std;long long fun(int i, int j, int m);long long d[25][25][25];//记忆数组char n[25];//用字符数组存储n,方便处理int m;int main(){    int T;    cin >> T;    while(T--)    {        memset(d, -1, sizeof(d));        memset(n, 0, sizeof(n));        cin >> (n + 1) >> m;        int len = strlen(n+1);        cout << fun(1, len, m) << endl;    }}long long fun(int i, int j, int m)//自顶向下+备忘{    int k;    long long t;    if(m == 1)//m=1时,剩余数字不用再划分,返回剩余的数字的值    {        t = 0;        for(int l = i; l <= j; l++)        {            t = n[l]-'0' + t*10;        }        return t;    }    if(d[i][j][m] > -1)        return d[i][j][m];    for(k = i; k <= j-m+1; k++)    {        t = 0;        for(int l = i; l <= k; l++)        {            t = n[l]-'0' + t*10;        }        d[i][j][m] = d[i][j][m] >= t * fun(k+1, j, m-1) ? d[i][j][m] : t * fun(k+1, j, m-1);    }    return d[i][j][m];}

0 0
原创粉丝点击