西 安 郵 電 大 學
(計算機學院)
課內實驗報告
實驗名稱: 最大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個乘號將它分成...