題意:給出n位數,以及乙個k,讓我們將這n位數分成k+1位
要求這k+1位相乘乘積最大;
思路:這是一道dp+高精度的題;
1.我們首先來看看dp部分 dp【i】【j】表示將前i位分為j部分的最大值;
於是遍歷的時候,我們就
k從小到打遍歷
i從小到大遍歷
分割位置從小到大遍歷 (注:分割塊數不能大於該範圍的位數)
2.高精度
這道題涉及的是高精度乘法
我們在dp【】【】上再加一維,來表示這個數
1 #include2 #include3 #include4 #include5 #include6using
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的數字串,要求選手使...