LGOJ P1018 乘積最大

2022-07-25 05:54:07 字數 1061 閱讀 7958

lgoj p1018 乘積最大

首先不難想到狀態轉移方程:

\[f[i][j]=max\ , s \in (0,i) , i\in [1,n], j\in [1,k]

\]\(f[i][j]\)表示在\(i\)位置時已經用了\(j\)個乘號,表示當前的最大值。

\(calc(l,r)\)表示從\(l\)位置到\(r\)位置表示的數。

數的全部型別都是bigint。不高精度會炸鍋。

考慮初始化。任何不放乘號的情況:\(f[i][0]=calc(1,i), i \in [1,n]\)

其餘情況\(f[i][j]=0\)。

code:

#include #include #include #include #include #include #include #define ll long long

using namespace std;

struct bigint

void pr()

}bool operator<(const bigint &a) const

bigint operator+(const bigint &a) const

while (p)

return c;

}bigint operator*(const bigint a) const

while (p)

return c;

}bool empty()

bigint operator=(int num)

return *this;

}};int n, k, a[100];

bigint f[100][100];

bigint ans, aa;

bigint max(bigint &a, bigint &b)

bigint calc(int l, int r)

int main()

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

f[n][k].pr();

return 0;

}

洛谷1018 乘積最大

原題位址 劃分型 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範圍...

P1018 乘積最大

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

P1018 乘積最大

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