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

2021-07-03 10:24:56 字數 2193 閱讀 6938

西 安 郵 電 大 學

(計算機學院)

課內實驗報告

實驗名稱:     最大k乘積

專業名稱: 電腦科學與技術

班    級: 計科1202

學生姓名:   ——————

學號(8

位):————————

指導教師:    ————————

實驗日期:       2023年5

月12日

1. 上機題目及實驗環境

1.1上機題目:最大k乘積問題

1.2實驗環境:

作業系統:microsoft windows xp

軟體平台:microsoft visual c++

2. 演算法設計與分析

設w(h,k) 表示從第1位到第k位所組成的十進位制數;

設m(i,j)表示前i位分成j段所得的最大乘積;

則可得到如下經典的dp方程:

if(j==1) 

m(i,j) = w(1,i) ;

if(j >1 && j<=i )  

m(i,j) = m(d,j-1)*w(d+1,i) //其中: 1<=d< i (即從1開始一直到i-1 中找最大值

if(i < j) 

m(i,j) = 0 ;

//i一直小於等於n,j一直小於等於k

3. 核心**

void maxdp(int n,int k,int *a)

catch (filenotfoundexception e)  catch (ioexception e) finally catch (ioexception e)  catch (filenotfoundexception e)  catch (ioexception e) finally catch (ioexception e) {

// todo auto-generated catch block

e.printstacktrace();

* eg:

* n=4  k=2時

* m(4,2)=max(m(1,1)*w(2,4),m(2,1)*w(3,4),m(3,1)*w(4,4));

public void maxdp(int n,int k,int w,int  m){

int temp = 0;

for (int i = 1; i <=n ; i++) {

m[i][1] = w[1][i];

//dp過程

for (int i = 1; i <=n; i++) {

for (int j = 2; j <=k; j++) { //分成j段

int max = 0;

for (int d = j-1; d < i; d++) {

if((temp=m[d][j-1]*w[d+1][i])>max){

max = temp;//替換最大的值

m[i][j] = max;

for (int i = 1; i <=n; i++) {

for(int j=1;j<=n;j++){

system.out.print(m[i][j]+"     ");

system.out.println();

public static void main(string args) {

exp3 e = new exp3();

e.readfile();

//將num

分解為單個數字

int  a = new int[m];

int x = num,n1=n;

system.out.println(x);

while(x!=0){

a[n1--] = x%10;//a[0]中未存值

x /=10;

//初始化矩陣

int  w = new int[m][m];

for (int i = 0; i < w.length; i++) {

w[i][i] = a[i];

for (int j = i+1; j <=n; j++) {

w[i][j] = w[i][j-1]*10 + a[j];

int  m = new int[m][m];

e.maxdp(n, k, w, m);

system.out.println("最大乘積是

:"+m[n][k]);

e.writefile(m[n][k]);

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

設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 證明滿足最優性原理 假設...

動態規劃 乘積最大

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

《動態規劃》 乘積最大

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