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個乘號將它分成...