codevs 1017 乘积最大

来源:互联网 发布:淘宝女装海报设计 编辑:程序博客网 时间:2024/06/09 12:24

codevs 1017 乘积最大
题目大意:设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。
dp[i][j]表示从1 -> i 用了j个乘号
dp[i][j] = max{dp[t][j - 1] * a[t + 1][i]}

#include <iostream>#include <cstdio>#include <cstring>#define ll long longusing namespace std;ll dp[150][150],a[150][150];int n,k;char s[150];int main(){    scanf("%d%d",&n,&k);    scanf("%s",s + 1);     ll len = strlen(s + 1);    for(int i = 1; i <= len; ++i)    {        for(int j = i; j <= len; ++j)        {            a[i][j] = a[i][j - 1] * 10 + s[j] - '0';        }    }    for(int i = 1; i <= n; ++i) dp[i][0] = a[1][i];    for(int i = 1; i <= n; ++i)    {        for(int j = 1; j <= k && j < i; ++j)        {            for(int t = 1; t < i; ++t)            {                dp[i][j] = max(dp[t][j - 1] * a[t + 1][i],dp[i][j]);            }        }    }    printf("%lld",dp[n][k]);    return 0;}
原创粉丝点击