乘積最大(動規例題)

2021-07-11 07:01:56 字數 959 閱讀 4580

題目描述:

求在一長度為n的字串當中放k個符號所得的最大的乘積。

樣例輸入:

4 21231

樣例輸出: 62

這道題也是非常經典的動態規劃類題目,我們先按插入的乘號來劃分階段。

設f[i,j]表示前i個數擺j個乘號所得到的最大乘積。

sum[i,j]表示i到j所組成的數字。

f[i,j]=max

這樣這道題就可以prefect的解決了,但還有個地方特別需要注意,就是做動態規劃類題目,有時候邊界非常重要,這也是我覺得動態規劃之所以難的地方,你很難一道題狀態劃分,方程轉換,邊界的數值全部都非常準確,所以這應該也是我目前應該加強的地方。

這道題的f[i,0]=sum[1,i]。才可以ac。

var

s:string;

i,j,p,k,n:longint;

f,sum:array[0..40,0..40] of qword;

function max(x,y:longint):longint;

begin

if x>y then exit(x) else exit(y);

end;

begin

readln(n,k);

readln(s);

for i:=1 to n do

for j:=i to n do

val(copy(s,i,j-i+1),sum[i,j]);

for i:=1 to n do

f[i,0]:=sum[1,i];

for i:=1 to n do

for j:=1 to (i+k)-(max(i,k)) do

for p:=1 to i do

f[i,j]:=max(f[i,j],f[p,j-1]*sum[p+1,i]);

writeln(f[n,k]);

end.

乘積最大 動態規劃

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

編輯距離(動規例題)

題目描述 現有字串a,b,要使得a b,有如下三 種操作 將a刪除1個字元 將a插入1個字元 將a中的乙個字元改為另乙個字元 樣例輸入 sfdqxbw gfdgw 樣例輸出 4 解釋 sfdqxbw gfdqxbw gfdxbw gfdbw gfdgw,四步。這道題因為只能操作a,就能有效避免動態規...

低價購買(動規例題)

求乙個最長不下降子串行,以及這個最長不下降子串行在這個序列裡的個數 不能重複 對於第一問我們就只要普通的dp一下就行了,以下將最長不下降子串行稱為最長序列 對於第二問這裡要詳細的講一下。狀態有如下 f i 表示到第i個數的最長序列 b i 表示到第i個數的最長序列的個數 很容易得出方程 f i ma...