動態規劃之最大K乘積問題

2021-09-13 21:18:55 字數 1805 閱讀 2946

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

例如十進位制整數 1234 劃分為 3 段可有如下情形:

1 × 2 × 34 = 68

1 × 23 × 4 = 92

12 × 3 × 4 = 144

證明滿足最優性原理

假設最大k乘積是將前x位劃分為k-1段,再乘以最後的整數。若前x位的劃分不是最優的方法,則其乘積必然小於最優化分方法所得乘積s_max,則其與最後的整數所得結果也並非最大k乘積,與前提矛盾。因此,將前x位劃分為k-1段所得結果比為其最大乘積。

【動態規劃問題中對於最優性原理的證明多採用反證法

確定動態規劃函式

令number(i,j)表示第i位到第j位整數組成的(j-i+1)位整數;

令product(p,q)表示前p位整數被劃分為q段所得到的最大乘積;

[若劃分段數大於整數字數,則結果為0]

初始子問題:(q=1時)

product(p,1)=number(1,p)

無論多少位整數,被劃分為一段,其最大k乘積均為其本身。

下一階段子問題:(q>1且q<=p時)

product(p,q)=max

(1<=x<=p-1)

p為整數分為q段,分別求出前x位這個數分為q-1段所得最大乘積與餘下數段的乘積,選擇合適的資料結構記錄,然後進行比較,最大的結果即為product(p,q)。

列表

q\p12

3411

12123

123420

236492300

614440

0024第一行 將整數分為一段,結果即為其本身;

第二行product(2,2)=max=2;

product(3,2)=max=max=36;

product(4,2)=max=max=492;

第三行product(3,3)=max=6;

product(4,3)=max=max=144;

第四行product(4,4)=max=24;

q\p3

3131213

3131220

362

#include#includeusing namespace std;

//檔案中輸入的第一行為n k 第二行為整數

//將從文件中所得的數值轉換成陣列儲存

void getnumber(int number[20],int num,int n)

return;

}//求第p到q位整數所代表的數值

int countnumber(int p, int q,int *number)

return newnumber;

}int main()

for (int temp = 0; temp < n; temp++)

for (int i = 0; i < n; i++)//i表列

if (j <= i)

product[j][i] = max;

}} }

cout << "最大k乘積為 " << product[k-1][n-1] << "\n";

f2 << "最大k乘積為 " << product[k - 1][n - 1] << "\n";

f1.close();

f2.close();

return 0;

}

動態規劃之最大K乘積(實驗報告版)

西 安 郵 電 大 學 計算機學院 課內實驗報告 實驗名稱 最大k乘積 專業名稱 電腦科學與技術 班 級 計科1202 學生姓名 學號 8 位 指導教師 實驗日期 2015年5 月12日 1.上機題目及實驗環境 1.1上機題目 最大k乘積問題 1.2實驗環境 作業系統 microsoft windo...

乘積最大問題 動態規劃

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

動態規劃 乘積最大

古人云 不謀萬世者,不足謀一時 不謀全域性者,不足謀一域。張琪曼通過研究驚奇地發現,每個人一生的幸福指數可以用乙個長度為n的十進位制數字字串來表示,並且可以通過全域性統籌安排,將幸福指數分成k 1個部分應用在她感興趣的不同領域,從而使得總體幸福值最強,所謂幸福值最強,是指使得k個部分的乘積為最大。例...