问题描述
设I是一个n位十进制整数。如果将I分割为k段,则可得到k个整数。
这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,
求出I的最大k乘积。
Input:
5 3
54321
Output:
6420
#include<stdio.h>
#define n 5
#define k 3
int s[n+1][n+1];
int a[n+1]={1,5,4,3,2,1};
int shuzi(int i,int j)
{
int res=0;
for(int h=i;h<=j;h++)
{
res=res*10+a[h];
}
return res;
}
int main()
{
int i,j,h,temp=0;
s[1][1]=a[1];
for(i=2;i<=n;i++)
{
s[i][1]=s[i-1][1]*10+a[i];
}
for(i=2;i<=k;i++)
{
for(j=i;j<=n;j++)
{
s[j][i]=0;
for(h=1;h<j;h++)
{
temp=s[h][i-1]*shuzi(h+1,j);
s[j][i]=s[j][i]>temp?s[j][i]:temp;
}
}
}
printf("%d\n",s[n][k]);
return 0;
}