乘積最大 TYVJ1047 解題報告

2021-05-26 10:21:04 字數 1255 閱讀 9363

program p1047;

var n,m:longint;

s:string;

a:array [0..40,0..40] of longint;//用a表示從首位到末位的數是什麼,例如數為2314,a[2,3]則表示為31

f:array [0..40,0..5] of longint;//用f[i,j]表示前i位用了j個乘號後所取得的最大值

procedure init;

var i,j:longint;

ts:string;

begin

fillchar(a,sizeof(a),0);

for i:=1 to n do

begin

ts:=';

for j:=i to n do

begin

ts:=ts+s[j];

val(ts,a[i,j]);

end;

end;

//初始化的小技巧,一位一位的進行初始化

end;

procedure main;

var i,j,k,max:longint;

begin

for i:=1 to n do f[i,0]:=a[1,i];//首先前i位用0個乘號,那麼其實也就是原數中的某一段,即1~i的數

//dp方程:f[i,j]=max,即f[i,j]:=max

for i:=1 to n do

begin

for k:=1 to m do

begin

max:=-maxlongint;

for j:=1 to i-1 do if f[j,k-1]*a[j+1,i]>max then max:=f[j,k-1]*a[j+1,i];//打擂台找最大值

if max<>-maxlongint then f[i,k]:=max;

end;

end;

end;

begin

assign(input,'p1047.in'); reset(input);

assign(output,'p1047.out'); rewrite(output);

readln(n,m);

readln(s);

init;

main;

writeln(f[n,m]);//輸出為前n位用m個乘號所取得的最大值

close(input); close(output);

end.

Tyvj 1047 乘積最大

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

TYVJ P1047 乘積最大 Label dp

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

leetcode解題之乘積最大子陣列

給你乙個整數陣列 nums 請你找出陣列中乘積最大的連續子陣列 該子陣列中至少包含乙個數字 並返回該子陣列所對應的乘積。示例 1 輸入 2 3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0解釋 結果不能為 2 因為 2 1 不是子陣列。開始對動態規劃的...