今年是國際數學聯盟確定的「2000——世界數學年」,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目:
設有乙個長度為n的數字串,要求選手使用k個乘號將它分成k+1個部分,找出一種分法,使得這k+1個部分的乘積能夠為最大。
同時,為了幫助選手能夠正確理解題意,主持人還舉了如下的乙個例子:
有乙個數字串:312, 當n=3,k=1時會有以下兩種分法:
1) 3*12=36
2) 31*2=62
這時,符合題目要求的結果是:31*2=62
現在,請你幫助你的好朋友xz設計乙個程式,求得正確的答案。
程式的輸入共有兩行:
第一行共有2個自然數n,k(6≤n≤40,1≤k≤6)
第二行是乙個長度為n的數字串。
相對於輸入,應輸出所求得的最大乘積(乙個自然數)。
4
21231
62
設f[i][j]為前i過取j個乘號的最大值。
f [i
][j]
=max
(f[i
][j]
,f[l
][j−
1]∗a
[l+1
][i]
)(
1<=i
<=n
,1
<=j
<=k
,j
<=l
f[i][j]=max(f[i][j],f[l][j-1]*a[l+1][i])(1<=i<=n,1<=j<=k,j<=lf[
i][j
]=ma
x(f[
i][j
],f[
l][j
−1]∗
a[l+
1][i
])(1
<=i
<=n
,1<=j
<=k
,j<=l
code:
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int n,k;
string x,a[50]
[60],f[50]
[60];
string cmp
(string a,string b)
string mul
(string a,string b)
}for
(int i=
1;i<=
10000
;i++
) string c1="";
int i=
10000
;while
(i>=
1&&c[i]==0
) i--
;while
(i>=1)
return c1;
}int
main()
cin>>x;
x.insert(0
," ");
for(
int i=
1;i<=n;i++
)for
(int j=i;j<=n;j++
) a[i]
[j]=x.
substr
(i,j-i+1)
;for
(int i=
1;i<=n;i++
) f[i][0
]=a[1]
[i];
for(
int i=
1;i<=n;i++)}
} string ans=
"0";
for(
int i=k;i<=n;i++
) cout
}
P1018 乘積最大
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...
P1018 乘積最大
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...
P1018 乘積最大
今年是國際數學聯盟確定的 20002000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰9090周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xzxz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為nn的數字串,要求選手使...