讨论 / 为什么最后一个点会超时.....
wrongnumber 2014-03-09 00:40:31
点我顶贴 收藏 删除
#include<iostream>

#include<cstdio>

using namespace std;

char s[64];

int k,n;

long long a[43][43],dp[32][42][42];

long long DP(int i,int l,int r)

{

if (i==0) return a[l][r];

if (l>=r) return 0;

if (dp[i][l][r]) return dp[i][l][r];

for (int q=l;q<r;q++)

dp[i][l][r]=max(dp[i][l][r],a[l][q]*DP(i-1,q+1,r));

return dp[i][l][r];

}

int main()

{

scanf("%d%d%s",&n,&k,&s);

for (int q=0;q<n;q++)

for (int p=q;p<n;p++)

a[q][p]=a[q][p-1]*10+s[p]-'0';

printf("%lld",DP(k,0,n-1));

//system("pause");

return 0;

}

代码

查看更多回复
提交回复