dp程式實踐

2021-06-05 17:02:31 字數 752 閱讀 6061

有這樣一道題,稱為數塔。

font size: ← →

在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的:

有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

已經告訴你了,這是個dp的題目,你能ac嗎?

輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n(1 <= n <= 100),表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。

對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。

在基地培訓的時候,我們了解到這樣一種演算法,從問題的相反方向出發,就能使問題變得更簡便。

在考慮這道題時,我們可以先從下面解決,例如,從第4行的2往下走,當然走到19得到的和更大,於是我們就把2變成2+19;從18往下走,最大值為18+10;以此類推,我們可以把第四行全部用該點到下一行的和的最大值替換。在往上用同樣的方法進行,直到第一行,我們就得到了和的最大值。

**如下:

#includeint main()

} printf("%d\n",number[0][0]);

} return 0;

}

此為正解。

DP演算法實踐

情形一 題目 題面大概意思就是要找到最大和的子數列,並且輸出其和,其起始索引 1,其終止索引 1 做這道題時,我一開始的思路是 直接暴力遍歷找到所求解 上 define crt secure no warnings include using namespace std int p 100005 i...

MPI實踐 ParallelRank程式

每乙個程序隨機產生乙個數字儲存在本地,然後對比所有程序所包含的整個數字集,進行排序然後分發,最後將排序號輸出。輸入輸出如圖 整個程式所要做的就是收集所有程序產生的乙個隨機數,然後進行排序,最後將排序結果傳送給各自程序,最後將排序結果發回各程序並進行輸出。隨機數可以用rand 產生,用mpi gath...

網絡卡驅動程式實踐

一 虛擬網絡卡的實現 在linux系統中,新增乙個網路裝置大致需要以下步驟。1 分配乙個網路裝置結構體 alloc a net device struct vnet dev alloc netdev 0,eth d ether setup 2 註冊這個網路裝置 register netdev vne...