设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。
对于给定的I和k,编程计算I的最大k乘积。
数据输入
输入文件由多组数据组成。每组数据格式如下:第1行中有2个正整数n和k。正整数n是序列的长度;正整数k是分割的断数。
接下来的一行中是一个n位十进制整数。(n<=10)
结果输出
对于每组数据,输出计算出的最大k乘积。输入示例
2 1 15
输出示例
15
Original: FJ CFCS 2005
这题目很好玩的说.......................~~~~~~~~~~
我是用递归做的,不过大牛说我这也算DP了....Orz
说白了我有点暴力求解的意思....
- #include <stdio.h>
- char num[10];
- int len,k;
- int get_arr_val(int _start,int _end)
- {
- int res=0,i;
- for(i=_start;i<=_end;i++)
- res=res*10+num[i]-'0';
- return res;
- }
- int get_max_val(int _start,int _k)
- {
- int sum,i,msum=0;
- if(_k==1) return get_arr_val(_start,len-1);
- for(i=0;i<=len-_start-_k;i++)
- {
- sum=get_arr_val( _start, _start+i);
- sum*=get_max_val(_start+i+1,_k-1);
- if(sum>msum) msum=sum;
- }
- return msum;
- }
- int main()
- {while(scanf("%d%d",&len,&k)!=EOF)
- {
- getchar();
- gets(num);
- printf("%d/n",get_max_val(0,k));
- }
- return 0;
- }