dp 最大k乘積問題

2021-05-27 20:40:12 字數 1176 閱讀 7735

問題描述:

設i是乙個 n位十進位制整數。如果將i劃分為 k段,則可得到k個整數。這k個整數的乘積稱為i  的乙個 k乘積。試設計乙個演算法,對於給定的 i和 k,求出 i的最大 k乘積。

程式設計任務:

對於給定的i和k,程式設計計算i的最大k 乘積。

資料輸入:

由檔案input.txt提供輸入資料。檔案的第1 行中有2個正整數n和 k。正整數n是序列的長度;  正整數k是分割的段數。

接下來的一行中是乙個n位十進位制整數。(n<=10)

結果輸出:

程式執行結束時,將計算結果輸出到檔案 output.txt 中。檔案的第 1 行中的數是計算出的最  大k乘積。

樣例:2 1

核心思想:

先預處理每段數字然後f[i,j]=max前i個數字j個乘號的最大值。

var

f,a:array[0..10,0..10]of longint;

s:string;

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

function max(a,b:longint):longint;

begin

ifa>b then exit(a);

exit(b);

end;

begin

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

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

readln(n,k);

readln(s);

fori:=1 to n do

begin

a[i,i]:=ord(s[i])-ord('0');

for j:=i+1 to n do

a[i,j]:=a[i,j-1]*10+ord(s[j])-ord('0');

end;

fori:=1 to n do

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

fori:=1 to n do

forj:=1 to k-1 do

for p:=1 to i-1 do

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

writeln(f[n,k-1]);

close(input);close(output);

end.

最大k乘積問題

設i是乙個n位十進位制整數。如果將i分割為k段,則可得到k個整數。這k個整數的乘積稱為i的乙個k乘積。試設計乙個演算法,對於給定的i和k,求出i的最大k乘積。設w i j 表示從第i位到第j位的數字表示的整數,m i j 表示前i位分成j段所得到的最大乘積,則 m i 1 w 1 i m i j m...

NOIP 乘積最大(dp

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

dp專題 乘積最大

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