題意:有乙個字串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個乘號將它分成...