P1018 乘積最大題解

2021-10-25 18:00:16 字數 1448 閱讀 7550

題意:有乙個字串s(|s|<=40),給k(k<=6)個乘號,問怎樣組合得到的數字最大。

解法:這題不難!只是太複雜了!40位的資料的話,只能用高精度了,做法是dp,先預處理出**[i][j] (i≤j)表示s字串位置在i-j的子串,dp[i][j]表示以i為結尾用了j個乘號得到的最大數字,那麼轉移方程就是dp[

i][j

]=ma

x(dp

[i][

j],d

p[x]

[j−1

]∗qj

[x+1

][i]

)dp[i][j]=max(dp[i][j], dp[x][j-1]***[x+1][i])

dp[i][

j]=m

ax(d

p[i]

[j],

dp[x

][j−

1]∗q

j[x+

1][i

]),注意一下邊界問題就可。

**

#include

using

namespace std;

typedef

long

long ll;

const

int ne[4]

[2]=

;const

int n =50;

int n, k;

string s;

string max

(string a, string b)

//高精度加法

string add

(string a, string b)

while

(p1 >=0)

while

(p2 >=0)

if(jw) res.

insert(0

,"1");

return res;

}//高精度乘法

string mul

(string a, string b)

if(jw)

for(

int j =

0; j < num_0;

++j) r1.

("0");

++num_0;

res =

add(res, r1);}

return res;

} string **[n]

[n], dp[n]

[n];

intmain()

//dp!

for(

int i =

0; i < len;

++i)}}

cout << dp[len-1]

[k]<< endl;

return0;

}

洛谷P1018乘積最大題解 zhengjun

題目描述 今年是國際數學聯盟確定的 2000 2000 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90 9090 周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xzxz xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設...

P1018 乘積最大

今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...

P1018 乘積最大

今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...