題目描述
今年是國際數學聯盟確定的「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的數字串。
輸出格式:
結果顯示在螢幕上,相對於輸入,應輸出所求得的最大乘積(乙個自然數)。
輸入輸出樣例
輸入樣例#1:
4 2
1231
輸出樣例#1:
62 說明
noip2000提高組第二題
分析:
f[i][j]表示前j位新增了i個乘號時的最優解
狀態轉移方程:f[i][j]=max(f[i][j],f[i-1][h-1]*cs(h,j));
**:
var
f:array [0..140,0..106] of qword;
a:array [0..140,0..140] of qword;
i,j,k,l,n,r,s:longint;
s1,s2:string;
function
max(a,b:longint):longint;
begin
if a>b then max:=a
else max:=b;
end;
begin
readln(n,r);
readln(s1);
for i:=1
to n do
for j:=i to n do
begin
s2:=copy(s1,i,j-i+1);
val(s2,a[i,j]);
end;
for i:=1
to n do
f[i,0]:=a[1,i];
for k:=1
to r do
for i:=k+1
to n do
for j:=k to i do
f[i,k]:=max(f[i,k],f[j,k-1]*a[j+1,i]);
write(f[n,r]);
end.
洛谷P1018 乘積最大
洛谷p1018 乘積最大 題意 給乙個長度為n的數字串,在這個數字串中插入k個乘號,使得表示式的乘積最大 分析一下 算了,懶得分析了,中有詳細注釋,直接看 吧 君 include using namespace std const int maxn 45 struct biginteger bigi...
洛谷 P1018 乘積最大
今年是國際數學聯盟確定的 20002000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰 9090 周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友 xzxz 也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為 nn 的數字串...
洛谷 P 1018 乘積最大 Codevs
題目描述 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘...