问题标题: 洛谷:P1018 [NOIP 2000 提高组] 乘积最大 60pts求解

0
0
已解决
王旭邈
王旭邈
初级天翼
初级天翼

题目链接: 洛谷:P1018

rt,错误代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f;
int n,k;
ll dp[45][45][10];
char s[45];
ll calc(int l,int r)
{
    ll cnt=1,ans=0;
    for(int i=r;i>=l;i--)
    {
        ans+=cnt*(s[i]-'0');
        cnt*=10;
    }
    return ans;
}

ll solve(int l,int r,int k)
{
    if(!k) return dp[l][r][k]=calc(l,r);
    if(dp[l][r][k]) return dp[l][r][k];
    dp[l][r][k]=0;
    for(int i=l;i<r;i++)
        for(int j=0;j<k;j++)
        {   
            if(i-l>=j&&r-(i+1)+1-1>=k-j-1)
                dp[l][r][k]=max(dp[l][r][k],solve(l,i,j)*solve(i+1,r,k-j-1)),
                dp[l][r][k]=max(dp[l][r][k],solve(l,i,k-j-1)*solve(i+1,r,j));
        }
    return dp[l][r][k];
}

int main()
{
    scanf("%d%d",&n,&k);
    scanf("%s",s+1);
    printf("%lld",solve(1,n,k));
    return 0;
}

 


0
0
0
我要回答