国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

動態(tài)規(guī)劃 第1關(guān):數(shù)塔問題

這篇具有很好參考價值的文章主要介紹了動態(tài)規(guī)劃 第1關(guān):數(shù)塔問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

任務(wù)描述

本關(guān)任務(wù):編寫用動態(tài)規(guī)劃解決數(shù)塔問題。

相關(guān)知識

為了完成本關(guān)任務(wù),你需要掌握:動態(tài)規(guī)劃。

編程要求

第1關(guān):數(shù)塔問題,動態(tài)規(guī)劃,算法,數(shù)據(jù)結(jié)構(gòu)

求上圖從頂層到頂層的一個路徑,使路徑上的數(shù)字和最大。要求輸出最大的數(shù)字和max和數(shù)值和最大的路徑。

解題思路:

原始信息有層數(shù)和數(shù)塔中的數(shù)據(jù),層數(shù)用一個整型變量n存儲,數(shù)塔中的數(shù)據(jù)用二維數(shù)組data,存儲成如下的下三角陣:?

  1. 9
  2. 12 15
  3. 10 6 8
  4. 2 18 9 5
  5. 19 7 10 4 16

測試輸入:

  1. 5
  2. 9
  3. 12 15
  4. 10 6 8
  5. 2 18 9 5
  6. 19 7 10 4 16

輸出示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-532566.html

  1. max=59
  2. 數(shù)值和最大的路徑是:9->12->10->18->10
#include <stdio.h> 

/********** Begin **********/
#define MAX(a,b)((a) > (b) ? (a) : (b))//宏定義
int main() {
	int a[50][50][4];    
    a[1][1][1]=9;
    a[2][1][1]=12, a[2][2][1]=15;
    a[3][1][1]=10, a[3][2][1]=6,  a[3][3][1]=8;
    a[4][1][1]=2,  a[4][2][1]=18, a[4][3][1]=9,  a[4][4][1]=5;
    a[5][1][1]=19, a[5][2][1]=7,  a[5][3][1]=10, a[5][4][1]=4, a[5][5][1]=16; 
	int dp[50][50];
	int i,j,num[50];
	int g,h,e;
	//把第5行數(shù)據(jù)放入dp[5][]中 
	for(j=1;j<=5;j++) {
		dp[5][j] = a[5][j][1]; 
	}
	//使用動態(tài)規(guī)劃尋找出最大路徑和 
	for(i=4;i>=1;i--) {
		for(j=1;j<=i+1;j++){
			dp[i][j] = MAX(dp[i+1][j],dp[i+1][j+1]) + a[i][j][1];
		}	
	}
	//找出n-2前所有路徑值 
	num[4] = dp[4][1];
	for(i=4;i>=1;i--) {
		for(j=1;j<=i;j++) {
			num[i] = MAX(num[i],dp[i][j]);
			//找出n-1行經(jīng)過路徑的值 
			if(dp[i][j] == 28) {
//				printf("i=%d\n",i);
//				printf("j=%d\n",j);
				g = i;
				h = j;
//				printf("%d\n",a[4][2][1]); 
//				printf("%d\n",a[5][3][1]); 
			}
		}
	}
	//找出n行經(jīng)過路徑的值
	for(j=1;j<=5;j++) {
			if(a[g][h][1] + a[5][j][1] == 28) {
				e = j;
			}
	}
	//輸出最大路徑和 
	printf("max=%d\n",dp[1][1]);
	//遍歷輸出各行路徑值 
	printf("數(shù)值和最大的路徑是:"); 
	for(i=1;i<=5;i++) {
		if(i <= 3) {
			printf("%d->",num[i]-num[i+1]);
		} else if(i==4) {
			num[4] = a[g][h][1];
			printf("%d->",num[i]);
		} else if(i==5) {
			num[5] = a[5][e][1];
			printf("%d\n",num[i]);
			}
	}
    return 0;
}
/********** End **********/

到了這里,關(guān)于動態(tài)規(guī)劃 第1關(guān):數(shù)塔問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:40 | 初識動態(tài)規(guī)劃:如何巧妙解決“雙十一”購物時的湊單問題?

    數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:40 | 初識動態(tài)規(guī)劃:如何巧妙解決“雙十一”購物時的湊單問題?

    本節(jié)課程思維導(dǎo)圖: 淘寶的“雙十一”購物節(jié)有各種促銷活動,比如“滿 200 元減 50 元”。假設(shè)你女朋友的購物車中有 n 個(n100)想買的商品,她希望從里面選幾個,在湊夠滿減條件的前提下,讓選出來的商品價格總和最大程度地接近滿減條件(200 元),這樣就可以極大限

    2024年02月03日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:41 | 動態(tài)規(guī)劃理論:一篇文章帶你徹底搞懂最優(yōu)子結(jié)構(gòu)、無后效性和重復(fù)子問題

    數(shù)據(jù)結(jié)構(gòu)與算法之美學(xué)習(xí)筆記:41 | 動態(tài)規(guī)劃理論:一篇文章帶你徹底搞懂最優(yōu)子結(jié)構(gòu)、無后效性和重復(fù)子問題

    本節(jié)課程思維導(dǎo)圖: 今天,我主要講動態(tài)規(guī)劃的一些理論知識。學(xué)完這節(jié)內(nèi)容,可以幫你解決這樣幾個問題:什么樣的問題可以用動態(tài)規(guī)劃解決?解決動態(tài)規(guī)劃問題的一般思考過程是什么樣的?貪心、分治、回溯、動態(tài)規(guī)劃這四種算法思想又有什么區(qū)別和聯(lián)系? 什么樣的問

    2024年02月02日
    瀏覽(38)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-動態(tài)規(guī)劃

    數(shù)據(jù)結(jié)構(gòu)與算法-動態(tài)規(guī)劃

    (我猜是做的多了背的題多了就自然懂了) 迭代法一般沒有通用去重方式,因為已經(jīng)相當(dāng)于遞歸去重后了 這兩個問題其實是一個問題,一般直接寫出的沒有去重的遞歸法,復(fù)雜度很高,此時需要使用備忘錄去重,而備忘錄去重時間復(fù)雜度和使用dp數(shù)組進行迭代求解時間復(fù)雜度相同

    2024年02月04日
    瀏覽(26)
  • 動態(tài)規(guī)劃問題實驗:數(shù)塔問題

    動態(tài)規(guī)劃問題實驗:數(shù)塔問題

    動態(tài)規(guī)劃是一種解決復(fù)雜問題的方法,它將一個問題分解為若干個子問題,然后從最簡單的子問題開始求解,逐步推導(dǎo)出更復(fù)雜的子問題的解,最終得到原問題的最優(yōu)解。動態(tài)規(guī)劃的關(guān)鍵是找到子問題之間的遞推關(guān)系,以及確定合適的邊界條件和初始值。 數(shù)塔問題是一個經(jīng)典

    2024年02月10日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)與算法之貪心&動態(tài)規(guī)劃

    數(shù)據(jù)結(jié)構(gòu)與算法之貪心&動態(tài)規(guī)劃

    ? ? ? ? 一:思考 ????????1.某天早上公司領(lǐng)導(dǎo)找你解決一個問題,明天公司有N個同等級的會議需要使用同一個會議室,現(xiàn)在給你這個N個會議的開始和結(jié)束 時間,你怎么樣安排才能使會議室最大利用?即安排最多場次的會議?電影的話 那肯定是最多加票價最高的,入場

    2024年02月09日
    瀏覽(25)
  • python算法與數(shù)據(jù)結(jié)構(gòu)---動態(tài)規(guī)劃

    python算法與數(shù)據(jù)結(jié)構(gòu)---動態(tài)規(guī)劃

    記不住過去的人,注定要重蹈覆轍。 對于一個模型為n的問題,將其分解為k個規(guī)模較小的子問題(階段),按順序求解子問題,前一子問題的解,為后一子問題提供有用的信息。在求解任一子問題時,通過決策求得局部最優(yōu)解,依次解決各子問題。最后通過簡單的判斷,得到

    2024年02月20日
    瀏覽(31)
  • 數(shù)據(jù)結(jié)構(gòu)與算法 | 動態(tài)規(guī)劃算法(Dynamic Programming)

    上一篇文末已經(jīng)提到了記憶化搜索是動態(tài)規(guī)劃(Dynamic Programming)的一種形式,是一種自頂向下(Top-Down)的思考方式,通常采用遞歸的編碼形式;既然動態(tài)規(guī)劃有自頂向下(Top-Down)的遞歸形式,自然想到對應(yīng)的另外一種思考方式 自底向上( Bottom-Up ) ,也就是本篇要寫的內(nèi)

    2024年02月05日
    瀏覽(24)
  • Java數(shù)據(jù)結(jié)構(gòu)與算法----動態(tài)規(guī)劃(背包篇)

    Java數(shù)據(jù)結(jié)構(gòu)與算法----動態(tài)規(guī)劃(背包篇)

    1.1.算法思路 0/1背包是動態(tài)規(guī)劃、背包問題中最經(jīng)典的問題啦!它主要的問題是: 給定n種物品、這n種物品的重量分別是,價值分別是?,而你有一個容量為C的背包,請問如何求出所能拿的最大價值呢? 對于動態(tài)規(guī)劃,我們先需要找到一條推導(dǎo)公式,然后確定邊界: 我們設(shè)

    2024年02月07日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)與算法:動態(tài)規(guī)劃(Dynamic Programming)詳解

    動態(tài)規(guī)劃(Dynamic Programming,簡稱DP) 是一種在數(shù)學(xué)、管理科學(xué)、計算機科學(xué)、經(jīng)濟學(xué)和生物信息學(xué)等領(lǐng)域中使用的,通過把原問題分解為相對簡單的子問題的方式求解復(fù)雜問題的方法。動態(tài)規(guī)劃經(jīng)常被用于求解優(yōu)化問題。 動態(tài)規(guī)劃的核心思想是將復(fù)雜問題分解為更小的子問

    2024年04月25日
    瀏覽(27)
  • 動態(tài)規(guī)劃——數(shù)塔問題(三維數(shù)組的應(yīng)用)

    動態(tài)規(guī)劃——數(shù)塔問題(三維數(shù)組的應(yīng)用)

    聲明:理論指導(dǎo)《算法設(shè)計與分析 第四版》 因為這個地方用到了三維數(shù)組,感覺很有意思就故意挑出來分享給大家(三維數(shù)組可以看成很多頁二維數(shù)組) 4.5.1認識動態(tài)規(guī)劃 數(shù)塔問題: 如圖4-12所示的一個數(shù)塔,從頂層到底層或從底層到頂層,在每一結(jié)點可以選擇向左走或是

    2024年02月03日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包