題目大意:
有一串數字,我們要求出怎麼在裡面插入乘號,可以使得總乘積最大。
解題思路:
暴力不可行,這裡我們用區間dp,所謂的區間dp就是狀態裡面包含有區間的端點,然後不斷推。這裡的轉移方程為:
for i l->n-1:
dp[l][k]=max(dp[l][k],dp[i+1][k-1]*no)
其中,dp[l][k]表示左端點在l處時還可以劃分為k段的時候最大乘積是多少。i就是列舉後面的端點。no表示假如這樣列舉導致的新的數是多少。這題需要寫高精度,但是我用python水過去了。這裡用的是py2,大家假如用py3,把裡面的raw_input換為input就可以了。
ls=raw_input().split(" ")
n=int(ls[0])
k=int(ls[1])
k+=1
an=raw_input()
dp=inf=1e100
def dfs(l,k):
if k==1:
return int(an[l:n])
if n-lreturn -inf
if dp[l][k]!=-1:return dp[l][k]
for nx in range(l,n-1):
dp[l][k]=max(dp[l][k],dfs(nx+1,k-1)*int(an[l:nx+1]))
return dp[l][k]
for i in range(n+10):
for j in range(k+10):
dfs(0,k)
print(dp[0][k])
洛谷 P1018 乘積最大
題目描述 今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘...
洛谷P1018 乘積最大
洛谷p1018 乘積最大 題意 給乙個長度為n的數字串,在這個數字串中插入k個乘號,使得表示式的乘積最大 分析一下 算了,懶得分析了,中有詳細注釋,直接看 吧 君 include using namespace std const int maxn 45 struct biginteger bigi...
洛谷 P1018 乘積最大
今年是國際數學聯盟確定的 20002000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰 9090 周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友 xzxz 也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為 nn 的數字串...