洛谷1018 乘積最大

2021-07-24 09:43:53 字數 693 閱讀 7981

原題位址

劃分型

dp字串

解題思路

1.預處理一下,把i到j擷取的子串轉化為數字;

2.明確dp陣列表示的狀態,f[i][k]表示在前i個字元劃分k次得到的最大乘積;

3.初始化,f[i][0]=t[0][i](0<=i

4.三重迴圈跑dp,最外層列舉劃分次數,第二層列舉i,最內一層列舉斷點(斷點在0到i-1範圍),將大問題分解成「0~i區間內劃分k次得到的最大乘積」。將j+1~i看作乙個數,0~j看作已處理好的,那麼就很容易得到狀態轉移方程:

f[i][k]=max(f[i][k],f[j][k-1]*t[j+1][i])

參考**

#include#include#include#include#includeusing namespace std;

int f[45][10],t[45][45];

int main()

{ intn,kk;

strings;

cin>>n>>kk;

cin>>s;

intnum;

for(int i=0;i

洛谷 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 的數字串...