P1018 乘積最大

2022-06-02 05:36:10 字數 1209 閱讀 5390

題意:給出n位數,以及乙個k,讓我們將這n位數分成k+1位

要求這k+1位相乘乘積最大;

思路:這是一道dp+高精度的題;

1.我們首先來看看dp部分 dp【i】【j】表示將前i位分為j部分的最大值;

於是遍歷的時候,我們就

k從小到打遍歷

i從小到大遍歷

分割位置從小到大遍歷  (注:分割塊數不能大於該範圍的位數)

2.高精度

這道題涉及的是高精度乘法

我們在dp【】【】上再加一維,來表示這個數

1 #include2 #include3 #include4 #include5 #include

6using

namespace

std;

7int dp[200][100][2000]=,a[200][200][100]=,n,k;

8int js(int x,int y,int

z);9

intmain()

22//

預處理23

for(int i=1;i<=n;i++)29}

30}31//

計算32

for(int i=1;i<=n;i++)49}

50/*

51在前i個數中尋找乙個分割點

52從該點分割得到的數最大

53該點前所留的數應比j(分成的段數)大

54*/

55for(int z=i;z>=j-1;z--)58}

59}60for(int i=dp[n][k+1][0];i>=1;i--)63}

64int js(int x,int y,int

z);71

//高精度乘法

72for(int i=1;i<=a[z][x][0];i++)76}

77//

計算進製與數字長度

78//

所有數字長度儲存在陣列[0]位

79for(int i=1;i<=100;i++)

84//

比較乘積與原數字的大小,與dp[x][y]比較

85if(tsz[0]0

])88

for(int i=tsz[0];i>=0;i--)

93//

如果是更優解,儲存該解

94for(int i=tsz[0];i>=0;i--)

97return -1

;98 }

P1018 乘積最大

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

P1018 乘積最大

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

P1018 乘積最大

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