P1018乘積最大

2021-10-23 14:47:36 字數 2080 閱讀 3027

今年是國際數學聯盟確定的「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的數字串,要求選手使...